2011-01-04 2 views
0

객체를 윈도우에 전달하려면 this example을 따르지 만, 인수로 "undefined"값이있는 객체는 전달합니다.Xul에서 임의의 JavaScript 객체 전달

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

이 내 첫 번째 창입니다. (OBS 덤프debug options이 켜져 때 콘솔에 인쇄하는 방법입니다) 두 번째 창이로드되면 onload를 호출하여 다음을 인쇄합니다.

arg = 정의되지 않음

어떻게 수정해야합니까?

답변

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 : "dump ('arg ='+ window.arguments [0] .maxProgress +"\ n ");'를 사용하여 읽지 만'undefined ' –

+0

또한 고마워요. 불행히도 여전히 '정의되지 않은'상태입니다. 약속으로 질문을 업데이트했습니다. –

+0

@Tom Brito, openDialog는 .open과 다른 매개 변수를 가지고 있으므로 해당 null 매개 변수를 제거해야합니다. 실제로는 해당 함수 호출이 실제로 작동합니다. 그 말로는, 내가 여기서 일하는 귀하의 질문에서 코드의 버전이 있습니다. 귀하의 버전이 정의되지 않은 이유에 대해 명확하지 않습니다. 사실, 전체 객체를 debug()에 보내고 있습니다. 어떻게 처리하는지 모르겠습니다. jsdump를 사용하면 객체라는 것을 알 수 있습니다. print window.argument [0] .wrappedJSObject.param2가 더 나은 선택 일 수 있습니다. – pc1oad1etter