2012-05-09 4 views

답변

1

배경 페이지와 콘텐츠 스크립트 사이에 message passing을 사용하십시오. 배경 페이지는 2.js을 스크립트로로드하거나 2.js을 응용 프로그램의 배경 스크립트 자체로 사용하여 chrome.extension.onRequest.addListener으로 들어오는 메시지를 수신하여 값을 보관합니다. 콘텐츠 스크립트는 요청을 보내고 콘텐츠 스크립트는 원하는 값의 응답을 보냅니다.

+0

변수는 개체입니다. 언급 했어야했다. –

+0

주기적 참조가없는 개체에 대해 메시지 전달이 작동한다고 생각합니다. 객체에 순환 참조가있는 경우 문자열을 사용할 수 없으므로 작업이 훨씬 어려워집니다. 객체를 제거해야 할 수도 있습니다. – apsillers

0

나는 이것을 알아 냈다. 좀 더러운,하지만 내가 가지고있는 동적 인 객체와 함께 작동합니다.

단순히 모든 코드를 페이지에 삽입하여 추가했습니다. 여기에 내 콘텐츠 스크립트는 다음과 같습니다

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을 포함하는 코드의 같은 종류를 사용했다.

+0

물론, 그게 효과가 있습니다 - 당신이'2.js'는 내용 스크립트에 사용할 수 없다고 말했기 때문에 행동 유형이 범위를 벗어난 것이라고 생각했습니다 (그러나 당신이 그것을 의미한다는 것을 이해할 수 있다고 생각합니다. 로드 타임에 매번로드해서는 안됩니다. 다이내믹 인젝션은 괜찮습니까?). 백그라운드 페이지에서'chrome.tabs.executeScript ('2.js')'를 사용할 수도 있다고 생각합니다. – apsillers

+0

네 말이 맞다. 혼란을 용서해주십시오. 나는 또한'executeScript()'사용을 고려할 것이다. 그러나 현재 확장은 배경 페이지를 필요로하지 않는다. –

관련 문제