English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مشكلة النافذة التكاملية في JavaScript![window.dialogArguments]

في الأيام القليلة الماضية، واجهت مشكلة توافق المتصفح أثناء العمل على المشروع، وتم حلها، وأود أن أقوم بتسجيل ذلك، وأضف أيضًا بعض المعلومات المتعلقة بالنمط

وصف المشكلة بشكل مفصل:

عند فتح نافذة فرعية في متصفح Firefox، إذا كانت صفحة الفرعية تحتوي على صفحات متعددة، وتم النقر على صفحة التالي، فإن صفحة الفرعية ستعاد تحميل، ثم يفقد obj dialogArguments، ويظهر alert output كـ undefined [حل المشكلة في البند الثالث]

في الآونة الأخيرة، خلال العمل على موقع الويب، كنت بحاجة إلى استخدام ميزة نافذة النمط، وواجهت بعض المشاكل، لذا بحثت عن بعض المعلومات لحل هذه المشاكل

1. طرق فتح النافذة:

استخدام a.window.open(pageURL,name,parameters);
يستخدم طريقة b.window.showModalDialog() لإنشاء نافذة模وية تظهر محتوى HTML (يدعم IE 4+)
يستخدم طريقة c.window.showModelessDialog() لإنشاء نافذة غير模وية تظهر محتوى HTML (يدعم IE 5+)

2. عرض مشكلة النمط: يتم استخدام window.showModalDialog(), ويظهر نافذة التبديل التي تنتج عن هذا الطريقة في IE6 أقل في الارتفاع مقارنة ب IE7 و IE8، لذا يمكنك كتابة js لحل هذه المشكلة (يحتاج الارتفاع في IE6 إلى زيادة حوالي 35PX، يمكن تعيين خاصية dialogLeft بناءً على عرض الشاشة)
代码片段如下:

 var swidth=window.screen.width;
 if(parseInt(width)>swidth)
 swidth=100;
 else
 swidth=(swidth-parseInt(width))/2;
varwindowStatus="dialogWidth:"+width+"px;dialogHeight:"+height+"px;dialogTop:80px;dialogLeft:"+swidth+"px;center:1;status:no;scroll:no;resizable:no;help:no;";
//弹出方法
 if(url.indexOf("?")<0){window.showModalDialog(url+'?setTime='+newDate().getTime(),obj,windowStatus);}
 else{window.showModalDialog(url+'&setTime='+newDate().getTime(),obj,windowStatus);}

3.dialogArguments对象FF浏览器中丢失问题: 弹出showModalDialog窗口中需要分页显示数据,点击页面中的信息,获取分页数据的ID,传给弹出的父窗口。在IE下运行很正常,但在FireFox 3.0中运行时,如果页面不跳转则可以正常的调用window.dialogArguments,若页面一跳转则会丢失window.dialogArguments的引用

现给出2种解决方法:

a.将showModalDialog窗口的页面放在frameset或者iframe里面,进行一次包装。
例:
window.showModalDialog("test.aspx");

test.aspx 页面内容

<frameset cols="0,*">
<frame src=""/>
<frame src="分页显示数据的页面"/>
</frameset> 

页面返回方法变成

function returnValue(flag)
{
 var myObj = window.parent.dialogArguments;
 myObj.value = flag;
 window.parent.close();
{}

بهذا يمكنك الحصول على القيمة العائدة

ب. إذا لم تريد إضافة صفحة إضافية، يمكنك استخدام الطريقة التالية، هذه الطريقة تستخدم obj window.opener.document، هذا العنصر لا يدعمه متصفحات IE7 وIE8 (لقد تم اختباره، لا أعرف كيف يكون على جهازك)، قم بتحديد المتصفح، ثم قم بتعيين القيمة إلى مجال مخفي في الصفحة الأم، ثم قم بمعالجة الصفحة الأم;

كود كما يلي:

function returnValue(flag)
 {
 document.getElementById("rValue").value=flag;
 if (window.ActiveXObject) //IE浏览器 
 {
 var myObj = window.dialogArguments;
 //alert(myObj);
 myObj.value = flag;
 window.close();
 {}
 else{
 window.opener.document.getElementById("hid_oilid").value=flag;
 window.opener.document.getElementById("txt_oil").value=flag+"号";
 //self.close();
 window.close();
 {} 
 {}

تم حل جميع المشاكل الأساسية، يمكن الرجوع إلى مواردها الأخرى للحصول على معلومات حول نقل القيم بين الصفحات الأم والفرعية

المنتجات التي قد تفضلك