background.js
및 popup.js
개의 스크립트로 Chrome 확장 프로그램을 작성합니다.폐쇄 컴파일러 : 백그라운드 참조로 Chrome 확장 팝업을 컴파일하는 방법
background.js
에서
:
function foo(){
// Does something
}
popup.js
에서 : foo
이 background.js
및 popup.js
다르게 이름이 변경됩니다 때문에이 두 파일을 컴파일
var backgroundPage = chrome.extension.getBackgroundPage();
backgroundPage.foo();
는 의지는 물론, backgroundPage.foo()
참조를 중단 구분합니다.
나는이 window["foo"] = foo;
을 사용 background.js
에 foo
을 수출하는 것입니다 해결하기 위해 "올바른"방법을 알고,하지만 난 (가능한 코드로 읽을 수 없도록) 가능하면 수출을 방지하고 싶습니다.
내가 하나 실행에 두 스크립트를 컴파일하고 --module
를 사용하여 별도의 출력 파일로 분할 시도했다 : 컴파일러가 알 수 없어
java -jar compiler.jar
--compilation_level ADVANCED_OPTIMIZATIONS--js background.js popup.js
--module backgroundMin:1
--module popupMin:1:backgroundMin
는 놀라 울 정도로 문제가 해결되지 않는 것이 backgroundPage
popup.js
을에 window
은 background.js
과 같습니다. @lends
, @borrows
및 @memberOf
을 사용하여 주석을 달았지만 제대로 작동하지 못했습니다.
그래서 내 질문은 : 컴파일이 가능 모두 background.js
및 popup.js
그래서 foo()
이름이 변경됩니다 - foo()
을 수출하지 않고 popup.js
에서 참조를 파괴하지 않고?
첫 번째 코드 블록이'background.js'에 들어가고 두 번째 코드 블록이'popup.js'에 삽입되었다고 가정합니다. 맞습니까? 컴파일러는'popupMin.ks' 내부에서'foo()'를 움직일 수 있다고 결정합니다.'foo()'는'background.js'에서 다른 변수에 대한 참조를 포함 할 수 있기 때문에 작동하지 않습니다. 'background.js'에서도 호출 할 수 없습니다). 어쩌면 내가 잘못하고있는 것일 수도 있습니다. – Woodgnome
'background.js'에서 다음과 같이해야합니다 :'var myWindow = new MyWindow(); myWindow.foo();'컴파일러는 두 모듈 모두에서 코드가 사용되면 코드를 이동하지 않지만 함수를 일관되게 참조해야합니다. –
'foo()'가 실제로'background.js'에서 절대 호출되지 않을 것입니다 (그렇지 않아야합니다).하지만 다른 함수들에 대한 의존성 때문에'background.js'에 있어야합니까? 'background.js'와'popup '을 가지고 있다면.js' 스크립트 파일을 컴파일 한 후 예상 결과를 제공합니다. – Woodgnome