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

jsのモーダライズドウィンドウ問題![window.dialogArguments]

数日前、プロジェクトでブラウザの互換性問題に直面しました。解決した後、記録を残し、モーダルの資料も掲載します!

詳細な問題説明:

Firefoxブラウザでサブウィンドウを弹出させると、サブページにはページが含まれており、次のページに進むとサブページがリフレッシュされ、その後window.dialogArgumentsオブジェクトが消失し、alert出力が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("?+;63'&#+'&setTime='
 ;setTime='+else{window.showModalDialog(url+'&setTime='

3newDate().getTime(),obj,windowStatus);} 3.dialogArgumentsオブジェクトのFFブラウザでの失却問題:showModalDialogウィンドウ内でページを分頁で表示し、ページ内の情報をクリックして、分頁データのIDを親ウィンドウに渡します。IEでは正常に動作しますが、Firefoxでは

.0で実行中、ページが遷移しない場合、window.dialogArgumentsを正常に呼び出すことができますが、ページが遷移するとwindow.dialogArgumentsの参照が失われます2以下に示します

解決策:
a. showModalDialog ウィンドウのページを frameset または iframe 内に配置し、一度包装します。
例:

window.showModalDialog("test.aspx");

test.aspx ページの内容*<frameset cols="0,
">/<frame src="分页显示数据的页面"
<frame src=""/<frame src="分页显示数据的页面"
>/< 

ページの戻り方法が変わりました

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

これで返された値を取得できます。

b. 親ページに新しいページを作成したくない場合は、以下の方法を使用できます。この方法では 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();
 } 
 }

基本的な問題はすべて解決しました。親ページと子ページの値の伝搬について、他の資料を多く参照してください。

おすすめ