2012-12-27 1 views
1

"EXPORTED_SYMBOLS가 (가) 배열이 아닙니다."Components.utils.import ("chrome : // app/content /app1.js ");예외 오류 : chrome : //app/content/app1.js - EXPORTED_SYMBOLS가 (가) 배열이 아닙니다.

나는 XUL 응용 프로그램을 만들고 JS 파일 중 하나 (예 : app.js)에서 위와 같이 다른 JS 파일을 포함하려고했습니다.

app.js 및 app1.js 모두의 콘텐츠 폴더에 저장되며, 또한의 chrome.manifest 파일에 다음 줄에

"콘텐츠 앱 콘텐츠를 /"다른 JS 파일에서

(app1.js 추가), 나는

app.js에서
var EXPORTED_SYMBOLS = ["Fooinstance"]; 

var Fooinstance = { 
    foo: function() { 
    ... 
    } 
} 

같은 문자를 보낸

Components.utils.import("chrome://app/content/app1.js"); 
// Error: chrome://app/content/app1.js - EXPORTED_SYMBOLS is not an array 

... 
Fooinstance.foo(); 

XULRunner 17.0.1 win32 라이브러리에서이 XUL 응용 프로그램을 실행하고 있습니다.

나는이 링크 https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using

그것은 도움이되지 않았다의 코드를 보면서 내가 자원으로 포함하는 경우 그러나 나는 자원의 일부로 포함하지 않을 작동합니다.

누군가 실수로 어떤 점을 지적 해 주시겠습니까?

+1

모든 것이 올바른 것처럼 보입니다. 캐싱 문제와 비슷합니다. '-purgecaches' 명령 행 플래그로 앱을 실행 해보십시오. –

+0

귀하의 의견을 주셔서 감사합니다 .. 심지어 같은 문제가 여전히 - purgecaches와 함께 애플 리케이션을 실행 한 후 .. – user1932378

답변

0

나는이 동일한 문제가있어서 그것을 해결했다 : 1) 파일 확장자 (.js)를 .jsm으로 바꾼다 2) 공유 할 클래스를 내보내는 첫 번째 줄을 모듈에 추가. EG는 :

var EXPORTED_SYMBOLS = ["Xobject"]; 

function Xobject(){ 
} 
Xobject.prototype.stop = function() { 
    return 'stop'; 
} 
Xobject.prototype.run = function() { 
    return 'running'; 
} 

3)

Components.utils.import('resource://gre/modules/Services.jsm'); 
Components.utils.import("chrome://myFirstAddOn/content/Xobject.jsm"); 

var myXobject = new Xobject(); 
alert(myXobject.run()); 

그것은 다른 사람이이를 얻기 위해 유

0

도움이 희망이 방법으로 호출, 또 다른 가능한 이유는 순환 종속성입니다. 내 경우는 조금 다르지만 ComponentsModel.import를 사용하여 JSM 파일을 두 개 가져 와서 서로 가져 왔습니다. 그런 다음이 오류가 발생했습니다.