2011-05-05 4 views
1

내 Xul 응용 프로그램의 단일 창에서 Javascript Module (JSM)을 사용하여 필요할 때 리소스를로드 할 수 있습니다.Javascript 모듈에 인수를 전달하는 방법은 무엇입니까?

그러나 JSM에 창을 전달해야하며이를 수행하는 방법을 알지 못합니다. 내 resource.jsm에서

:

var EXPORTED_SYMBOLS = ["hello"]; 

function hello(win) { 
    win.alert("ALERT FROM JSM!"); 
} 

내 창에 전화 : 내 시도는 다음

Components.utils.import("resource://module/resource.jsm"); 
hello(window); 

하지만 난 얻을 :

승리가 정의되지

resource.jsm에서

어떻게 만들 수 있습니까?

+0

처음에는'window = window'를 할당하면 어떻게됩니까? 나는 (어떤 식 으로든) 자체 할당으로 정착 된 특정 "미리 정의 된"전역 변수에 대해 몇 가지 정말 이상한 문제에 대해 들었던 것을 기억합니다 ... –

+0

@Platinum Azure 동일한 오류 메시지가 나타납니다. –

+0

@Platinum Azure 당신이 본 것은 [page 's samples] (https://developer.mozilla.org/En/Code_snippets/Modules)이라고 생각합니다. –

답변

0

hello 함수의 매개 변수 이름을 window으로 지정하는 데 문제가있을 수 있습니다. 윈도우가 예약어는 아니지만 대부분의 브라우저 환경에서는 정렬 할 수없는 상수로 간주합니다. 시도 : 모듈에

function hello(obj) { 
    obj.alert("ALERT FROM JSM!"); 
} 

을하고 자바 스크립트 모듈 설명서를 읽은 후 hello(window), hello(document.window), 또는 hello(this)


로를 호출, 당신이 내 객체를 생성해야합니다 같습니다 모듈을 만든 다음 참조로 속성을 변경하십시오.

Components.utils.import("resource://module/resource.jsm"); 
params.win = window; 
hello(); 

참고 : 먼저 함수를 호출 그 매개 변수 창을 할당에 의해 호출 것 그리고

var EXPORTED_SYMBOLS = ["params", "hello"]; 

params = { 
    win: this 
}; 

function hello() { 
    params.win.alert("ALERT FROM JSM!"); 
} 

: 당신의 JSM에서 그래서 나는 JSMs가 알고에 충분히 익숙하지 않다 이렇게하는 더 좋은 방법이 있지만 이것이 효과가 있습니다.

+0

변경되었지만 호출이있는 경우 obj가 정의되지 않았습니다. –

+0

대체 솔루션으로 답변이 업데이트되었습니다. – mVChr

+0

아주 좋은 관찰. 하지만'params.win.alert는 함수가 아닙니다. '라는 메시지가 나타납니다. 그리고'param.win'을'null'으로 선언함으로써,'alert()'호출에서'params.win is null'을 얻었 기 때문에 할당되지 않았 음을 알았습니다. 과제가 나오기 전에 뭔가 잘못되었습니다. (내가 무엇을 발견하면 여기에 게시 할 것입니다.) –

관련 문제