1

background.jspopup.js 개의 스크립트로 Chrome 확장 프로그램을 작성합니다.폐쇄 컴파일러 : 백그라운드 참조로 Chrome 확장 팝업을 컴파일하는 방법

background.js에서

:

function foo(){ 
    // Does something 
} 

popup.js에서 : foobackground.jspopup.js 다르게 이름이 변경됩니다 때문에이 두 파일을 컴파일

var backgroundPage = chrome.extension.getBackgroundPage(); 
backgroundPage.foo(); 

는 의지는 물론, backgroundPage.foo() 참조를 중단 구분합니다.

나는이 window["foo"] = foo;을 사용 background.jsfoo을 수출하는 것입니다 해결하기 위해 "올바른"방법을 알고,하지만 난 (가능한 코드로 읽을 수 없도록) 가능하면 수출을 방지하고 싶습니다.

내가 하나 실행에 두 스크립트를 컴파일하고 --module를 사용하여 별도의 출력 파일로 분할 시도했다 : 컴파일러가 알 수 없어

java -jar compiler.jar 
    --compilation_level ADVANCED_OPTIMIZATIONS--js background.js popup.js 
    --module backgroundMin:1 
    --module popupMin:1:backgroundMin 

는 놀라 울 정도로 문제가 해결되지 않는 것이 backgroundPagepopup.js을에 windowbackground.js과 같습니다. @lends, @borrows@memberOf을 사용하여 주석을 달았지만 제대로 작동하지 못했습니다.

그래서 내 질문은 : 컴파일이 가능 모두 background.jspopup.js 그래서 foo() 이름이 변경됩니다 - foo()을 수출하지 않고 popup.js에서 참조를 파괴하지 않고?

답변

1

아마도 --module 옵션을 사용하는 것이 가장 좋은 길일 것입니다. 더 좋은 방법은 없을 것입니다.

것은 제대로 작동하려면 이름 바꾸기를 얻으려면, 당신은 창 유형 확장 할 수 있어야한다 : background.js에서 다음

/** @extends {Window} */ 
function MyWindow() {} 

MyWindow.prototype = window.prototype; 

/** @return {void} */ 
MyWindow.prototype.foo = function() {}; 

var backgroundPage = 
    /** @type {MyWindow} */ (chrome.extension.getBackgroundPage()); 
backgroundPage.foo(); 

MyWindowWindow을 확장하기 때문에 유형 캐스트 ​​여기서 일한다 .

모든 내용은 실제 코드에 저장됩니다. extern을 사용하지 마십시오. 그렇지 않으면 이름 바꾸기가 차단됩니다.

+0

첫 번째 코드 블록이'background.js'에 들어가고 두 번째 코드 블록이'popup.js'에 삽입되었다고 가정합니다. 맞습니까? 컴파일러는'popupMin.ks' 내부에서'foo()'를 움직일 수 있다고 결정합니다.'foo()'는'background.js'에서 다른 변수에 대한 참조를 포함 할 수 있기 때문에 작동하지 않습니다. 'background.js'에서도 호출 할 수 없습니다). 어쩌면 내가 잘못하고있는 것일 수도 있습니다. – Woodgnome

+0

'background.js'에서 다음과 같이해야합니다 :'var myWindow = new MyWindow(); myWindow.foo();'컴파일러는 두 모듈 모두에서 코드가 사용되면 코드를 이동하지 않지만 함수를 일관되게 참조해야합니다. –

+0

'foo()'가 실제로'background.js'에서 절대 호출되지 않을 것입니다 (그렇지 않아야합니다).하지만 다른 함수들에 대한 의존성 때문에'background.js'에 있어야합니까? 'background.js'와'popup '을 가지고 있다면.js' 스크립트 파일을 컴파일 한 후 예상 결과를 제공합니다. – Woodgnome