非模式對話框是IE的一種窗口形式,打開非模式對話框后,在其被關閉之前,主調(diào)窗口不會繼續(xù)解析其后的htm代碼,同時主調(diào)窗口也不會被選中。
?
主調(diào)窗口與非模式窗口的信息傳遞
1.函數(shù)調(diào)用傳遞方式
vReturnValue = window.showModelessDialog ( sURL [, vArguments] [, sFeatures] )
?
主調(diào)窗口通過showModelessDialog方法的第二個參數(shù) vArguments 向非模式窗口傳遞參數(shù),該參數(shù)可以是數(shù)組,也可以是DOM對象。
非模式窗口通過window.dialogArguments 來提取傳遞過來的參數(shù),若是數(shù)組,則用window.dialogArguments[i]來表示數(shù)組的第i個參數(shù)
非模式窗口通過window.returnValue向主調(diào)窗口傳回值,這個值作為showModelessDialog 方法的返回值被主調(diào)窗口接收。
?
2.窗口操作傳遞方式
非模式窗口通過主調(diào)窗口傳遞過來window對象直接操縱主調(diào)窗口的元素
此時showModelessDialog 需要將主調(diào)窗口的 window 對象作為參數(shù)傳出,在非模式窗口中即可取得主調(diào)窗口的窗口參考,用腳本可以直接對它操縱。
?
如主調(diào)窗口的調(diào)用代碼如下:
showModelessDialog ("myDialog.htm",window,"status:false;dialogWidth:300px;dialogHeight:300px;edge:Raised; enter: Yes; help: No; resizable: No; status: No");
?
非模式窗口JScript代碼如下,即可接收主調(diào)窗口的窗口對象
? var sData = window.dialogArguments;
?
接著就可以操作主調(diào)窗口的任意變量和函數(shù)了,如下:
? sData.sUserName = ‘Value from ModelessDialog’; // sUserName是主調(diào)窗口的全局變量
? sData.fnUpdate(); //fnUpdate是主調(diào)窗口的函數(shù),在該函數(shù)中對sUserName變量做處理
?
這種方式下,主調(diào)窗口可以不通過普通返回值方式取得非模式窗口設定的數(shù)值
?
備注:
將主調(diào)窗口的Window對象傳入非模式窗口是一種很靈活的操作手段。但在實踐中發(fā)現(xiàn),窗口對象只能是主調(diào)窗口自己的,你不能通過Dom對象結構,將其他幀頁面(非主調(diào)窗口)的Window對象傳入。但在非模窗口中可以根據(jù)傳入的主調(diào)窗口的Window對象,通過Dom對象結構引用到非主調(diào)窗口的任何對象。
?
關于非模式對話框的參數(shù)設置sFeatures見
http://msdn.microsoft.com/workshop/samples/author/dhtml/refs/showModelessDialog.htm