#contents
#br


** Modal Dialog [#f02e439e]
- IEのshowModalDialog http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/showmodaldialog.asp
-- W3C非準拠
-- 第2引数で渡したObjectを、ポップアップ窓では dialogArguments で受け取ることができます。
-- ポップアップ窓で画面遷移があると、別窓が開いてしまう場合が多いので、ポップアップ窓はframeset化し、parent.dialogArguments、もしくは top.dialogArguments を利用すると好いでしょう。
- mozilla/Firefoxのwindow.open(,,'modal') http://www.mozilla.org/xpfe/xulref/windowref.html#open
-- 実際にはmodalではなく、modeless動作をする。つまり、親window側の操作もできてしまう。仕様なのか、バグなのか…(++)
-- 子windowを2枚開くと、1枚が親windowの背後に回ってしまうのも、バグじゃないかな…(++)

[変更前 (IE専用)]
 function showDialog() {
     var url = "popup.html";
     var features = "dialogHeight:400px;"
                  + "dialogWidth:470px;"
                  + "edge:sunken;"
                  + "help:no;"
                  + "scroll:no;"
                  + "resizable:no;"
                  + "status:no;"
                  + "unadorned:no;";
     showModalDialog(url, window, features);
 }

   親画面のElementから値を取得する方法
 var data = parent.dialogArguments.document.getElementById('data').innerHTML;

[変更後 (IE/mozilla)]
 function showDialog() {
     var url = "popup.html";
     if (window.showModalDialog) {
         var ieFeatures = "dialogHeight:400px;"
                        + "dialogWidth:470px;"
                        + "edge:sunken;"
                        + "help:no;"
                        + "scroll:no;"
                        + "resizable:no;"
                        + "status:no;"
                        + "unadorned:no;";
         showModalDialog(url, window, ieFeatures);
     } else {
         var windowName = "sampleDialog"
         var mozillaFeatures = "width=450,"
                             + "height=400,"
                             + "toolbar=no,"
                             + "location=no,"
                             + "directories=no,"
                             + "status=no,"
                             + "menubar=no,"
                             + "scrollbars=no,"
                             + "resizable=no,"
                             + "modal=yes";
         window.open(url, windowName, mozillaFeatures);
     }
     return false;
 }

   親画面のElementから値を取得する方法
 var openerWindow;
 if (window.showModalDialog) {
 	openerWindow = parent.dialogArguments;
 } else {
 	openerWindow = parent.opener;
 }
 var data = openerWindow.document.getElementById('data').innerHTML;


** window.close() [#a92978c2]
- mozilla/Firefoxでは、targetを指定するかwindow.open()で開いたwindowでないと、window.close()できない場合が多いようです。タブブラウザであるために、その辺の仕様が異なっているのでしょうか?
- 下記のように変更することで、FirefoxでもIEでも、確認ダイアログ無しで閉じるようになります。
- %%下記のように変更することで、FirefoxでもIEでも、確認ダイアログ無しで閉じるようになります。%%
-- [2009/10/03]IE8でもFirefox3.5でも確認ダイアログが表示されます。

[変更前]
 function window_close() {
     window.close();
 }

[変更後]
 function window_close() {
     var nvua = navigator.userAgent;
     if (nvua.indexOf('MSIE') >= 0){
         if(nvua.indexOf('MSIE 5.0') == -1) {
             top.opener = '';
         }
     } else if (nvua.indexOf('Gecko') >= 0){
         top.name = 'CLOSE_WINDOW';
         wid = window.open('','CLOSE_WINDOW');
     }
     top.close();
 }

- Firefoxの設定で回避することもできますが…、セキュリティ的にどうなの?
-- C:\Program Files\Mozilla Firefox\greprefs\all.js
---「pref("dom.allow_scripts_to_close_windows", false);」の「false」を「true」に変更する。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS