Chrome 확장 프로그램을 만드는 법을 배우고 있으며 공식 가이드 here의 지침 중 하나를 따르려고합니다. 내가 달성하기 위해 노력하고 무엇window.postMessage에 대한 DOM 예외 12
은 다음과 같습니다
- background.js는 타겟으로 URL의 페이지 동작을 보여줍니다.
- Page action은 클릭 할 때 스크립트를 실행합니다.
- 실행 된 스크립트가 페이지에 javascript를 삽입합니다.
지금까지 너무 좋아! 다음 스크립트를 사용하여 페이지에 삽입합니다.
var injectJS = function(url, cb) {
var h = document.getElementsByTagName('head')[0],
s = document.createElement('script');
s.type = 'text/javascript';
s.src = url;
if (cb)
s.onload = cb;
h.appendChild(s);
};
injectJS(chrome.extension.getURL('script/do_something.js'));
이제 삽입 된 스크립트가 확장 프로그램에 다시 통신 할 수있게하려고합니다.
내가 찾는 것은 문서에 설명되어있는 것 같습니다. 내가 콘솔 오류 "DOM 예외 12"이 표시 window.postMessage
할 때
https://developer.chrome.com/extensions/content_scripts.html#host-page-communication
문제이다.
편집 : 샘플 코드를 실행하는 첫 번째 문제가 해결되었습니다.
나는 smae 코드에서 얻을 다른 오류가 port.postMessage
에서입니다 : 여기
Uncaught Error: Attempting to use a disconnected port object
var port = chrome.runtime.connect();
// Respond to messages from the injected script to collect results
window.addEventListener('message', function(e) {
if (e.source != window)
return;
if (e.data.type && (e.data.type == 'FROM_PAGE')) {
console.log('Content script received: %s', e.data.text);
port.postMessage(e.data.text);
}
}, false);
는 기본적으로 나는 일시적으로 일부 데이터를 유지하기 위해 노력하고있어 페이지를 다시로드하는 동안 . 콘텐츠 스크립트/삽입 스크립트는 데이터를 수집 한 후 다음 페이지를로드합니다. 백그라운드 스크립트는 모든 페이지가로드 될 때까지 결과를 보유해야합니다.
당신을 감사, 즉 정확히했다 : 당신이 자체 페이지에서 메시지를 보내는 때문에 경우
는 와일드 카드를 사용하는 것은, 아마 충분합니다! 샘플에 더주의를 기울여야했습니다. 질문이 하나 더 있으면 괜찮습니다. 계속해서 같은 코드를 사용하면'port.postMessage' 부분이 작동하지 않습니다. 내 리스너 스크립트가 실행되고 데이터가 존재하는지 확인하기 위해 로그하지만 현재 포트가 닫혔다 고합니다. –
그 중 하나가 죽었습니다. 코드를 보지 않고 정확한 이유를 알 수 없습니다. –
원래 게시물에 몇 가지 추가 정보가 업데이트되어 도움이되는 경우. –