簡體   English   中英

在Xul中傳遞任意JavaScript對象

[英]Passing an arbritrary JavaScript object in Xul

我遵循此示例將對象傳遞給窗口,但是當它作為參數時,其值為“未定義”。

這是我的第一個窗口(OBS 轉儲打印到控制台時的方式。 調試選項被打開):

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<!DOCTYPE window SYSTEM "chrome://XulWindowArgTest/locale/XulWindowArgTest.dtd">

<window id="windowID" width="400" height="300"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <script>
        <![CDATA[
            function onClickMe(event) {
                dump("begin\n");

            try {
                var args = {
                  param1: true,
                  param2: 42
                };
                args.wrappedJSObject = args;

                var watcher = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher);
                watcher.openWindow(null, "chrome://XulWindowArgTest/content/about.xul", "windowName", "chrome", args);

            } catch (e) {
                dump("error: " + e + "\n");
            }


                dump("end\n");
            }
        ]]>
    </script>

    <button label="Click me !" oncommand="onClickMe();" />

</window>

我的第二個窗口:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<!DOCTYPE window SYSTEM "chrome://XulWindowArgTest/locale/XulWindowArgTest.dtd">

<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    onload="onload()">

    <script>
        <![CDATA[
            function onload() {
                dump('arg = ' + window.arguments[0].wrappedJSObject + "\n");
            }
        ]]>
    </script>

    <label value="test" />

</window>

當第二個窗口加載時,它調用onload並打印:

arg =未定義

知道如何解決嗎?

我通常調用openDialog,因此可以不使用觀察程序而直接傳遞一個或多個參數...但是從您嘗試遵循的示例中,似乎您省略了這一行:

args.wrappedJSObject = args;

如果您嘗試全部以內聯方式進行操作,則可能應該通過:

{wrappedJSOBject:["myarg"]}

此外,在第二個窗口中,您嘗試打印

window.arguments[0].wrappedJSObjectarg

當您的示例引用時

window.arguments[0].wrappedJSObject;

我假設前者是一個疏忽,而后者是一個錯字。


另外,您可能需要確保在加載窗口之后才檢查參數-在由窗口的onload屬性調用的函數中檢查參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM