JavaScript:window.showModalDialog的dialogArguments在FireFox與IE的問題

摘要:JavaScript:window.showModalDialog的dialogArguments在FireFox與IE的問題

這次我又碰到靈異事件了,

IE玩window.showModalDialog,沒啥問題。

在FireFox玩,就出問題。

由於我需要開子視窗出來,

而在子視窗會按下Button後,傳回值給父視窗,而該Button會post back。

當你在FireFox,第一次還沒PostBack時使用dialogArguments是不會有問題的喔!

等你PostBack後,dialogArguments就變null了喔!(真是隨便玩玩就發現bug)

所以我必須解決這個問題:名為「FireFox的showModalDialog的dialogArguments為null的問題」

所以針對FireFox傳回值給父視窗必須用另一招解決。

以下是我的解法。(應該叫暴力解吧!)

開窗在IE與FirxFox都是一樣的

 

window.showModalDialog(url,window);

傳回值就有不同如下(使用JQuery)

按下Button PostBack並將值傳回(PostBack 寫入以下JavaScript)

                   $(document).ready(function() {
                        if(window.dialogArguments!=null)//IE Use
                        {
                            window.dialogArguments.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ;                   
                        }
                        else //FireFox Use
                        {                  
                            opener.window.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ; 
                        }
                        window.close();
                   });

========================================================================

後記

為了維護與修改方便。

目前改為以下方式實作

在head標籤內輸入下列內容


        var ParentWindow;
        $(document).ready(function() {
            if ($.browser.msie)
                ParentWindow = window.dialogArguments;
            else
                ParentWindow = opener.window;
        });
    </script>

在使用時改用以下方式實作


           ParentWindow.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ;
           window.close();
});