0

しばらくお試ししていますが、バックグラウンドページの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によると

+0

1) '" scripts ":[" background.js "]'は 'assets/js/background.js'を使うべきです - それはタイプミスですか? 2)リスナーでsendResponse経由で応答を送信していません。 3)devtoolsデバッガの使用を開始する:バックグラウンドページとポップアップにブレークポイントを設定し、コードを実行して何が起こるかを確認する。 4)chrome:// extensionsページ5の拡張機能を再読み込みしてください。[Google Chrome/Firefoxには拡張機能がコンソールに表示されません](// stackoverflow.com/a/38920982) – wOxxOm

+0

@wOxxOm itタイプミスでしたが、コード内に正しくありました。私はここでそれを間違って書きました。 2)私は気付いていますが、今は実行するためにコンソールログが必要ですが、その時点までは到達していません。 3)バックグラウンドでブレークポイントを設定し、あなたに返信します 4)ログを表示するには、必ず拡張コンソールをリロードして使用してください。 – InfinityCounter

+0

拡張機能を削除してメッセージを再度追加してメッセージを送信しましたが、どうして私がgetBackgroundPage()を使ってメソッドを取得できないのか分かりませんでした。これは私の主な問題です – InfinityCounter

答えて

1

letconst宣言は、実行中の実行コンテキストのLexicalEnvironmentにスコープされた変数を定義します。

あなたは1ページ(背景ページ)でグローバルにLET/constの変数を宣言すると、変数のLexicalEnvironmentがスコープされ、そのページの別のページ(ポップアップ)の外、明らかである(ページのwindowに等しい)グローバルthisその範囲の。このようなポップアップ・ページのような別の同一生成元chrome-extension://*extensionID*ページに表示ですのでwindowオブジェクトのプロパティとして公開さ

使用var foo = bar又はfunction foo() {}宣言。

関連する問題