Передача произвольного объекта JavaScript в Xul - PullRequest
0 голосов
/ 04 января 2011

Я следую этому примеру , чтобы передать объект в окно, но когда он в качестве аргумента имеет значение "undefined".

Это мое первое окно (обс. dump - это способ печати на консоли, когда включены опции отладки ):

<?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 = undefined

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 04 января 2011

Я обычно вызываю openDialog и поэтому могу просто передать один или несколько параметров без использования наблюдателя ... но из примера, которому вы пытаетесь следовать, кажется, что вы пропустили эту строку:

args.wrappedJSObject = args;

Если вы пытаетесь сделать все это встроенным, возможно, вы должны передать:

{wrappedJSOBject:["myarg"]}

Кроме того, во втором окне вы пытаетесь напечатать

window.arguments[0].wrappedJSObjectarg

, когда ваш пример ссылается

window.arguments[0].wrappedJSObject;

Я предполагаю, что первая ошибка - недосмотр, а вторая - опечатка.


Кроме того, вам может потребоваться убедиться, что вы не проверяетеаргументы до тех пор, пока окно не будет загружено - проверьте их в функции, вызываемой атрибутом onload окна.

...