웹 페이지와 Chrome 확장 프로그램의 콘텐츠 스크립트는 동일한 DOM을 공유하지만 별도의 JS 실행 컨텍스트가 있습니다. 즉, Chrome 확장 프로그램에서 angular.element().scope()
을 통해 요소를 가져 왔음에도 불구하고 올바른 범위 개체에 액세스하지 못했습니다. 자세한 내용은 Chrome dev docs을 참조하십시오.
Chrome 확장 프로그램의 수정 된 데이터를 페이지로 가져 오려면 콘텐츠 스크립트를 통해 DOM을 조작하거나 추가 단계를 수행하여 수정 된 데이터를 가져 오세요. 데이터를 웹 페이지의 실행 컨텍스트 (및 이후 컨트롤러 범위)에 저장합니다.
후자의 경우 해결책은 Chrome의 Message Passing API를 사용하는 것입니다. 특히 웹 페이지와 Chrome 확장 프로그램 (here 참조)간에 통신하도록 설계된 API입니다. 웹 페이지에서
"externally_connectable": {
"matches": ["http://*.foo.com/*"]
}
에 요청합니다
이
첫째, 당신의 manifest.json 파일에서 해당 웹 사이트 (들)에 대한 API를 사용 : 여기
이 문서에서 예제 Chrome 확장 프로그램에 연결합니다. 요청에 대한 리스너를 추가하여 크롬 확장 프로그램의
background.js
파일에서
// Chrome extension's ID
var extensionId = "abcdefghijklmnoabcdefhijklmnoabc";
chrome.runtime.sendMessage(extensionId, {foo: 'bar'},
function(response) {
if (response.success) {
$scope.myData.foo = response.data;
$scope.$apply();
}
});
:
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (request.foo) {
sendResponse({ data: 'modified data goes here' });
}
});
이 과정을 당신의 크롬 확장에 데이터를 보낼 수 있도록 콜백, 당신은 당신의 모델을 업데이트 할 것 AngularJS 앱이 올바른 실행 환경으로 작동하도록합니다.