私は、タブに表示されている現在のウェブサイトで特定のスクリプトが使用されているかどうかを示す拡張子を作成しようとしています。Chrome Message Passing APIが機能しない
タブが切り替えられた場合に通知を処理し、スクリプトが使用されているかどうかを確認するために私の拡張機能のアイコンを変更する、私のバックグラウンドスクリプトにメッセージを送信するために使用されるスクリプトを確認するコンテンツスクリプトがあります。
これは私のコンテンツスクリプトです(load.js):
chrome.runtime.sendMessage({script_found: checkScript()});
function checkScript() {
var script_found = true;
var length = document.getElementsByTagName("script").length;
for (var i = 0; i < length; i++) {
var list = document.getElementsByTagName("script")[i].src;
var t = list.toString();
if (t.length > 1) {
if((t.indexOf("edge") != -1) || (t.indexOf("prototype") != -1)) {
script_found = false;
}
}
}
return script_found;
}
chrome.runtime.onMessage.addListener(
function(request, sendResponse) {
if(request.tabSwitch == true) {
sendResponse({script_found: checkScript()});
}
});
これは私のバックグラウンドサービス(background.js)です:
chrome.tabs.onActivated.addListener(tabSwitch);
function tabSwitch() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {tabSwitch: "true"},function(response) {
refreshIcon(response.script_found);
});
});
}
chrome.runtime.onMessage.addListener(
function(request) {
refreshIcon(request.script_found);
});
function refreshIcon(script_found) {
if(script_found) {
chrome.browserAction.setIcon({path:"good.png"})
} else if(!script_found) {
chrome.browserAction.setIcon({path:"error.png"})
}
}
それが機能しない理由私は本当に知りませんon tabSwitch。ウェブサイトが読み込まれてもうまく動作しますが、タブを切り替えると表示されません。
私はあなたが助けてくれることを願っています! ありがとうございます!
EDIT: はこれが私のマニフェスト(manifest.jsonを)です:
{
"manifest_version": 2,
"name": "Script Hunter",
"description": "This extension shows if certain scripts are used on this page.",
"version": "1.0",
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["load.js"],
"run_at": "document_idle"
}],
"background": {"scripts": ["background.js"]},
"browser_action": {
"default_icon": "good.png"
},
"permissions": [
"tabs",
"activeTab",
"https://ajax.googleapis.com/"
]
}
おかげで再び!
あなたは 'manifest.json'を投稿してくださいもらえますか?私はあなたのコンテンツスクリプトが 'chrome.tabs.onActivated'が起こったときに引き起こす(デフォルトでは' document_idle'によって)遅すぎて注入されたと思います。スクリプトはまったく注入されません。 –
通信関連の質問の99%に対する1つの答え:それをデバッグしてください。あなたはおそらく、「真の」と他のものとの間に「真実」は等しくないことに驚くでしょう。 – wOxxOm
@HaibaraAiはあなたが正しいように見えます。私は何を変えるべきですか? –