2014-07-21 2 views
0

추가 기능에 chrome : // URI를 사용하려고하는데 신뢰할 수있는 스크립트 방법을 사용하여 페이지 작업자를 사용하고 싶습니다. URI를 하드 코딩 할 때 작동합니다 (chrome://<package name>/<part>/<file>). 그러나, self.data.url ('filename')을 사용할 때 작동합니다. 추가 기능의 ID로 이메일 스타일 대신 GUID를 사용하고 resource : // URI를 사용하지 않으므로 chrome : // URI를 사용하고 싶습니다.Firefox Addon Scripting 신뢰할 수있는 페이지 컨텐츠

내용 스크립트

addon.port.emit('hi'); 

HTML

<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Gaia Utils Settings</title> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
     <script type="text/javascript" src="chrome://gaiascripts/content/dropdown.min.js"></script> 
     <script type="text/javascript" src="chrome://gaiascripts/content/settings.dev.js"></script> 
     <script type="text/javascript" src="chrome://gaiascripts/content/test.dev.js"></script> 
     <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"> 
     <link href="css/settings.css" rel="stylesheet" type="text/css"> 
     <link href="css/poststyle.css" rel="stylesheet" type="text/css"> 
    </head> 
    <body> 
     <nav id="navbar_header" class="navbar navbar-blue navbar-static-top"></nav> 
     <div id="content_wrapper" class="container"> 
     <div id="content_padding" class="container"></div> 
     </div> 
     <footer class="footer"></footer> 
    </body> 
</html> 

main.js

var PageWorker = require("sdk/page-worker"); 
PageWorker.Page({ 
    contentURL: "chrome://gaiautils/content/settings.dev.html", 
    onMessage: function(message) { 
     console.log(message); 
    } 
}); 

내가, 내가 페이지 모드를 사용하고 그와 함께에 스크립트를 첨부 할 수 있습니다 알고 있지만 필자는 파일 내에서 스크립트를 호출하고 기본 추가 기능 코드와 통신 할 수 있습니다. 그래서 내 케이크를 가지고 먹을 수있는 방법이 있습니다 - 하드 코딩 된 chrome : // URI를 사용하여 HTML 파일 내에서 스크립트를 호출하면서 그 스크립트를 메인으로 다시 전달할 수 있습니다. js 파일?

+0

** ** 애드온 코드에 원격 스크립트를로드하지 마십시오! – nmaier

+0

질문의 나머지 부분은 무엇입니까? 귀하의 문제는 정확히 무엇입니까? 작동하지 않는 것은 무엇입니까? 시도 할 때 오류가 무엇입니까? – nmaier

+0

질문 : chrome : // URI를 사용하고 있기 때문에 HTML 파일에서 직접 호출되는 콘텐츠 스크립트에서 addon.port.emit()을 사용할 수 있도록 어떻게 할 수 있습니까? 리소스를 사용하고 싶지 않기 때문에 self.data.url ('htmlFile')을 사용해야합니다. // pageckage-GUID-at-jetpack/path/to/file page-mods를 사용할 수는 있지만 HTML 파일 내에서 스크립트 파일을 호출하지 않는다는 것을 의미합니다. –

답변

1

HTML 파일에서 직접 호출되는 콘텐츠 스크립트에서 addon.port.emit()을 사용하여 self.data를 사용할 필요가 없도록하려면 어떻게해야합니까? URL ('htmlFile'), I는 자원 사용하지 않기 때문에 : // pageckage - GUID -에서 - 제트 팩/경로 /로/파일을

SDK는 URL 만하면 페이지가 "신뢰"고려 로드하는 것은 추가 기능 자산 (data/)의 일부입니다. chrome:// URI가 없습니다. 따라서 PageWorker 정의에서 contentScriptFile: [...] 옵션을 통해 일반 콘텐트 스크립트를 사용해야합니다.

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 

적 (훨씬 적은 정도 및 성능상의 이유로) 보안상의 이유로 원격 스크립트를로드하지 마십시오! jQuery를 사용하려면 jQuery의 로컬 복사본을 제공하십시오.

+0

글쎄, 그런 종류의,하지만 그것은 의미가 있습니다. 감사! 그렇다면 contentScriptFile을 사용할 경우 페이지에 콘텐츠 스크립트를 삽입 할 때 페이지 모드와의 차이점은 무엇입니까? 나는 page-mods로 스타일 시트를 추가 할 수 있음을 알고있다. 로컬 JQ 파일에 대한 조언을 주셔서 감사합니다. –