しばらくお試ししていますが、バックグラウンドページのjsファイルでメソッドを呼び出せません。Chrome拡張機能バックグラウンドページのメソッドを呼び出せません
私のマニフェストには、次のようになります。
{
"name" : "First chrome extension",
"version" : "0.0.1",
"manifest_version" : 2,
"browser_action" : {
"default_title" : "Practice",
"default_icon" : {
"16" : "assets/images/icon16.png",
"24" : "assets/images/icon24.png",
"32" : "assets/images/icon32.png"
},
"default_popup" : "popup.html"
},
"background" : {
"scripts" : ["background.js"]
},
"content_scripts" : [{
"matches" : ["*://*/*"],
"js" : [
"assets/js/jquery-3.2.1.slim.min.js",
"assets/js/content.js"
]
}],
"permissions" : [
"activeTab",
"storage"
]
}
background.js:
function test()
{
return 'called';
}
資産/のJS/popup.js:
console.log(chrome.extension.getBackgroundPage().test());
使用私が見た例のほとんどはchrome.extension.getBackgroundPageメソッドを使用して背景を取得しますが、このメソッドを試すたびにメソッドまたは任意のbackground.jsで設定した他の変数は未定義で、返されるウィンドウオブジェクトには存在しません。
また、私はそうのようなメッセージングAPI使用してみました: background.js
"use strict";
const test = function() {
console.log(1);
}
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
console.log(request);
if(request.msg.toLowerCase() === "bg-test") test();
}
);
資産/のJS/popup.js:
$(function() {
const btn = '#en-dis-btn';
$(btn).click(function(e){
e.preventDefault();
chrome.runtime.sendMessage({'msg' : 'bg-test'}, function(response) {
console.log(response);
});
});
});
が、background.jsでリスナーが呼び出されることはありませんが。私は何が間違っていますか?背景ページがヌルでないため、何かが読み込まれています。 ECMA specificationによると
1) '" scripts ":[" background.js "]'は 'assets/js/background.js'を使うべきです - それはタイプミスですか? 2)リスナーでsendResponse経由で応答を送信していません。 3)devtoolsデバッガの使用を開始する:バックグラウンドページとポップアップにブレークポイントを設定し、コードを実行して何が起こるかを確認する。 4)chrome:// extensionsページ5の拡張機能を再読み込みしてください。[Google Chrome/Firefoxには拡張機能がコンソールに表示されません](// stackoverflow.com/a/38920982) – wOxxOm
@wOxxOm itタイプミスでしたが、コード内に正しくありました。私はここでそれを間違って書きました。 2)私は気付いていますが、今は実行するためにコンソールログが必要ですが、その時点までは到達していません。 3)バックグラウンドでブレークポイントを設定し、あなたに返信します 4)ログを表示するには、必ず拡張コンソールをリロードして使用してください。 – InfinityCounter
拡張機能を削除してメッセージを再度追加してメッセージを送信しましたが、どうして私がgetBackgroundPage()を使ってメソッドを取得できないのか分かりませんでした。これは私の主な問題です – InfinityCounter