私が見た例はタブから拡張機能までであり、その逆ではないので、ここで少し助けを探しています。
カスタムChrome拡張機能でデバッグしているページ/タブのソースコードを取得しようとしています。拡張機能がメッセージを呼び出し、応答が呼び出しを行う拡張機能パネルのjavascriptに返送されるようにします。
マニフェスト
"permissions": [
"tabs",
"<all_urls>",
"debugger"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
background.js
chrome.browserAction.onClicked.addListener(function() {
chrome.tabs.query({active:true, windowId:chrome.windows.WINDOW_ID_CURRENT}, function(tabs) {
debuggee = {tabId:tabs[0].id};
chrome.debugger.attach(debuggee, version, onAttach.bind(null, tabs[0].id));
});
});
function onAttach(tabId) {
chrome.windows.create({url: "spy.html?" + tabId, type: "panel", width: 900, height: 700}, function(window) {
winId = window.id;
});
content.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.data == "getHTML") {
sendResponse({data: document.getElementById('header').innerHTML});
}
});
spy.html
<script src="spy.js" type="text/javascript"></script>
spy.js
window.addEventListener("load", function() {
chrome.debugger.sendCommand({tabId:tabId}, "DOM.getDocument");
chrome.debugger.onEvent.addListener(onEvent);
});
function onEvent(debuggeeId, message, params) {
if (message=="DOM.documentUpdated") {
chrome.tabs.sendMessage(tabId, {data: "getHTML"}, function(response) {console.log(response.data);});
}
結果
ポートエラー:接続を確立できませんでした。受信側は存在しません。miscellaneous_bindings:235 chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:235
'undefined'のイベントハンドラーのエラー:未定義のプロパティ'data'を読み取れませんTypeError:
chrome-extension://fpdkndicjblnkakkiiapbbdflkehjmgm/headers.js:132:91
at miscellaneous_bindings:279:11
でundefinedのプロパティ'data'を読み取れませんchrome.Event.dispatchToListener(event_bindings:387:21)
at chrome.Event.dispatch_(event_bindings:373:27)
at chrome.Event.dispatch(event_bindings:393:17)
at Object.chromeHidden.Port.dispatchOnDisconnect(miscellaneous_bindings:238 :27)
実行しようとすると、このエラーが発生します。私は何が欠けていますか?