2011-01-04 2 views
0

Я следую this example, чтобы передать объект в окно, но когда он в качестве аргумента имеет значение «undefined».Передача произвольного объекта JavaScript в Xul

Это мое первое окно (. Набло свалки является способом печати на консоль, когда debug options включены):

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

когда вторых окнах, он вызывает нагрузка и отпечатки:

arg = undefined

Любая идея, как исправить это?

ответ

0

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

args.wrappedJSObject = args; 

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

{wrappedJSOBject:["myarg"]} 

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

window.arguments[0].wrappedJSObjectarg 

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

window.arguments[0].wrappedJSObject; 

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


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

+0

О подходе openDialog, я попытался с первым примером на странице: 'openDialog (null," chrome: //XulWindowArgTest/content/about.xul "," windowName "," chrome ", {status: «Чтение удаленных данных», maxProgress: 50, прогресс: 10}); 'и читать с помощью' dump ('arg =' + window.arguments [0] .maxProgress + "\ n"); 'но он либо печатает' undefined ' –

+0

Также спасибо за исправления. К сожалению, он по-прежнему печатает 'undefined'. Я обновил вопрос с вашими назначениями. –

+0

@Tom Brito, openDialog имеет разные параметры, чем .open, поэтому вам нужно будет удалить этот нулевой параметр, я полагаю, для этого вызова функции на самом деле. С учетом сказанного, у меня есть версия кода из вашего вопроса, который работает здесь. Я не понимаю, почему ваша версия возвращается неопределенно. На самом деле, вы отправляете весь свой объект на debug() - я не уверен, как он справляется с этим; Я использую jsdump, и он просто говорит мне, что это объект. печать window.argument [0] .wrappedJSObject.param2 может быть лучшим выбором для вас. – pc1oad1etter

Смежные вопросы