在原使用 ASP.NET 開發的網頁中,使用 window.showModalDialog 開啟查詢子視窗,再傳回查詢結果。但是 window.showModalDialog 在新版的瀏覽器,如 Firefox 或 Chrome,已被移除。只好繞彎,改用 jQuery UI 來達成。
參考:showModalDialog jquery plugin,其原始文章為 window.showModalDialog() - Cross Browser, new version。
showModalDialog.js 如下:
// Based on this article: http://extremedev.blogspot.com/2011/03/windowshowmodaldialog-cross-browser-new.html/*Usage example:var url = 'test.html';$.showModalDialog({     url: url,     height: 500,     width: 900,     scrollable: false,     onClose: function(){ var returnedValue = this.returnValue; }});UPDATE August 2012: Looks like there is a problem when setting DocType: HTML 4.01 Doctype on top of extremedevStart.html. --> The popup does not close.To fix this use:$dlg.dialogWindow.dialog('close');instead of:window.close();*/var $dialog = null;jQuery.showModalDialog = function (options) {    var defaultOptns = {        url: null,        dialogArguments: null,        height: 'auto',        width: 'auto',        position: 'center',        resizable: true,        scrollable: true,        onClose: function () { },        returnValue: null,        doPostBackAfterCloseCallback: false,        postBackElementId: null    };    var fns = {        close: function () {            opts.returnValue = $dialog.returnValue;            $dialog = null;            opts.onClose();            if (opts.doPostBackAfterCloseCallback) {                postBackForm(opts.postBackElementId);            }        },        adjustWidth: function () { $frame.css("width", "100%"); }    };    // build main options before element iteration    var opts = $.extend({}, defaultOptns, options);    var $frame = $('<iframe id="iframeDialog" />');    if (opts.scrollable)        $frame.css('overflow', 'auto');    $frame.css({        'padding': 0,        'margin': 0,        'padding-bottom': 10    });    var $dialogWindow = $frame.dialog({        autoOpen: true,        modal: true,        width: opts.width,        height: opts.height,        resizable: opts.resizable,        position: opts.position,        overlay: {            opacity: 0.5,            background: "black"        },        close: fns.close,        resizeStop: fns.adjustWidth    });    $frame.attr('src', opts.url);    fns.adjustWidth();    $frame.load(function () {        if ($dialogWindow) {            var maxTitleLength = 50;            var title = $(this).contents().find("title").html();            if (title.length > maxTitleLength) {                title = title.substring(0, maxTitleLength) + '...';            }            $dialogWindow.dialog('option', 'title', title);        }    });    $dialog = new Object();    $dialog.dialogArguments = opts.dialogArguments;    $dialog.dialogWindow = $dialogWindow;    $dialog.returnValue = null;}//function postBackForm(targetElementId) {//    var theform;//    theform = document.forms[0];//    theform.__EVENTTARGET.value = targetElementId;//    theform.__EVENTARGUMENT.value = "";//    theform.submit();//}var prntWindow = getParentWindowWithDialog(); //$(top)[0];var $dlg = prntWindow && prntWindow.$dialog;function getParentWindowWithDialog() {    var p = window.parent;    var previousParent = p;    while (p != null) {        if ($(p.document).find('#iframeDialog').length) return p;        p = p.parent;        if (previousParent == p) return null;        // save previous parent        previousParent = p;    }    return null;}function setWindowReturnValue(value) {    if ($dlg) $dlg.returnValue = value;    window.returnValue = value; // in case popup is called using showModalDialog}function getWindowReturnValue() {    // in case popup is called using showModalDialog    if (!$dlg && window.returnValue != null)        return window.returnValue;    return $dlg && $dlg.returnValue;}if ($dlg) window.dialogArguments = $dlg.dialogArguments;if ($dlg) window.close = function () { if ($dlg) $dlg.dialogWindow.dialog('close'); };function CloseWindow() {    if ($dlg) {        $dlg.dialogWindow.dialog('close');    } else {        ForceCloseWindow();    }}function ForceCloseWindow() {    var browserName = navigator.appName;    var browserVer = parseInt(navigator.appVersion);    //alert(browserName + " : "+browserVer);    //document.getElementById("flashContent").innerHTML = "<br> <font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";    if (browserName == "Microsoft Internet Explorer") {        var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;        if (ie7) {            //This method is required to close a window without any prompt for IE7 & greater versions.            window.open('', '_parent', '');            window.close();        }        else {            //This method is required to close a window without any prompt for IE6            this.focus();            self.opener = this;            self.close();        }    } else {        //For NON-IE Browsers except Firefox which doesnt support Auto Close        try {            this.focus();            self.opener = this;            self.close();        }        catch (e) {        }        try {            window.open('', '_self', '');            window.close();        }        catch (e) {        }    }}要使用此功能,必須先載入 jQuery 及 jQuery UI。主程式範例如下
<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>Show Modal Dialog Test</title>  <link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.10.4.custom.min.css"></head><body><h1>Show Modal Dialog Test</h1>課號: <span id='txt-cono'></span><br><br><button id="btn-query">查詢</button><script type="text/javascript" src="js/jquery-1.10.2.js"></script><script type="text/javascript" src="js/jquery-ui-1.10.4.custom.min.js"></script><script type="text/javascript" src="js/showModalDialog.js"></script><script type="text/javascript">$('#btn-query').click(function(){    var url = 'popup-test.html';    $.showModalDialog({        url: url,        dialogArguments: '課程資料查詢',        height: 500,        width: 900,        scrollable: false,        onClose: function()        {            var returnedValue = this.returnValue;            $('#txt-cono').text(returnedValue.cono);        }    });});</script></body></html>popup-test.html 原始程式如下。
<!DOCTYPE html><html><head>  <title>Popup Target</title></head><body><h1 id='h1-title'></h1><table>  <tr>    <td><button data-cono="004 40110">傳回</button></td><td>004 40110</td>  </tr><tr>    <td><button data-cono="004 M0130">傳回</button></td><td>004 M0130</td>  </tr><tr>    <td><button data-cono="222ED5010">傳回</button></td><td>222ED5010</td>  </tr><tr>    <td><button data-cono="323EU2260">傳回</button></td><td>323EU2260</td>  </tr></table><script type="text/javascript" src="js/jquery-1.10.2.js"></script><script type="text/javascript" src="js/jquery-ui-1.10.4.custom.min.js"></script><script type="text/javascript" src="js/showModalDialog.js"></script><script type="text/javascript">$(document).ready(function(){   $('#h1-title').text(window.dialogArguments);});$('table button').click(function(){    var cono = $(this).attr('data-cono');    setWindowReturnValue({cono: cono});         /* window.close() 在 IE 或其他情況下,可能沒有作用          要改成下列指令        */        $dlg.dialogWindow.dialog('close');});</script></body></html>