콘텐츠 스크립트 (1.js
)를로드합니다. <script>
요소를 추가하고 확장자 (2.js
) 내의 파일을 가리 킵니다. 2.js
은 콘텐츠 스크립트로 포함될 수 없습니다.Chrome 확장 프로그램의 콘텐츠 스크립트에서 페이지 스크립트와 통신합니다.
내부에 정의 된 변수를 사용할 방법이 있습니까 2.js
1.js
?
콘텐츠 스크립트 (1.js
)를로드합니다. <script>
요소를 추가하고 확장자 (2.js
) 내의 파일을 가리 킵니다. 2.js
은 콘텐츠 스크립트로 포함될 수 없습니다.Chrome 확장 프로그램의 콘텐츠 스크립트에서 페이지 스크립트와 통신합니다.
내부에 정의 된 변수를 사용할 방법이 있습니까 2.js
1.js
?
배경 페이지와 콘텐츠 스크립트 사이에 message passing을 사용하십시오. 배경 페이지는 2.js
을 스크립트로로드하거나 2.js
을 응용 프로그램의 배경 스크립트 자체로 사용하여 chrome.extension.onRequest.addListener
으로 들어오는 메시지를 수신하여 값을 보관합니다. 콘텐츠 스크립트는 요청을 보내고 콘텐츠 스크립트는 원하는 값의 응답을 보냅니다.
나는 이것을 알아 냈다. 좀 더러운,하지만 내가 가지고있는 동적 인 객체와 함께 작동합니다.
단순히 모든 코드를 페이지에 삽입하여 추가했습니다. 여기에 내 콘텐츠 스크립트는 다음과 같습니다
var path = document.createElement('div');
path.id = 'codearea-path';
path.innerHTML = chrome.extension.getURL('/');
path.style.display = 'none';
document.body.appendChild(path);
var script = document.createElement('script');
script.src = chrome.extension.getURL('1.js');
document.head.appendChild(script);
가 그럼 난
1.js
내부
2.js
을 포함하는 코드의 같은 종류를 사용했다.
물론, 그게 효과가 있습니다 - 당신이'2.js'는 내용 스크립트에 사용할 수 없다고 말했기 때문에 행동 유형이 범위를 벗어난 것이라고 생각했습니다 (그러나 당신이 그것을 의미한다는 것을 이해할 수 있다고 생각합니다. 로드 타임에 매번로드해서는 안됩니다. 다이내믹 인젝션은 괜찮습니까?). 백그라운드 페이지에서'chrome.tabs.executeScript ('2.js')'를 사용할 수도 있다고 생각합니다. – apsillers
네 말이 맞다. 혼란을 용서해주십시오. 나는 또한'executeScript()'사용을 고려할 것이다. 그러나 현재 확장은 배경 페이지를 필요로하지 않는다. –
변수는 개체입니다. 언급 했어야했다. –
주기적 참조가없는 개체에 대해 메시지 전달이 작동한다고 생각합니다. 객체에 순환 참조가있는 경우 문자열을 사용할 수 없으므로 작업이 훨씬 어려워집니다. 객체를 제거해야 할 수도 있습니다. – apsillers