17

Chrome拡張機能は初めてです。コンテンツ スクリプトとbackground.htmlページの間で通信しようとしています。background.htmlはリクエスト「hello」をコンテンツ スクリプトに送信し、コンテンツ スクリプトは「hello background」アラートで応答する必要があります。しかし、それは起こっていません。私のbackground.htmlコードは次のとおりです。

function testRequest() {        
    chrome.tabs.getSelected(null, function(tab) {
        chrome.tabs.sendRequest(tab.id, {greeting: "hello"});
    });    
}

content.jsコード:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting == "hello")
        alert("hello background");
    }
);

popup.htmlコード:

<!doctype html>
<html>
    <head></head>
    <body>
        <form>
            <input type="button" value="sendMessage" onclick="testRequest()" />
        </form>    
    </body>
</html>

manifest.json :

{
    "browser_action": {
        "default_icon": "icon.png",
        "popup": "popup.html"
    },
    "background": {
        "page": "background.html"
    },
    "permissions": [
        "tabs",
        "http://*/*",
        "https://*/*",
        "notifications",
        "contextMenus"
    ],
    "content_scripts": [
        {
            "matches": ["http://*/*","https://*/*"],
            "js": ["content.js"]
        }
    ],
    "name": "FirstExtension",
    "version": "1.0"
}

助けてください!

4

1 に答える 1

25

sendRequest/はChrome 20で/にonRequest置き換えられました。単なるエイリアスではなく、別の API です。sendMessageonMessage*Message*Request

Chrome <20 をサポートする場合 (PPA が更新されていないため、多くの Ubuntu ユーザーはまだ Chromium 18 のままです)、および を使用onRequestsendRequestます。それ以外の場合は、*Messageメソッドを使用してください。


もう 1 つの問題は、関数がバックグラウンド ページにあり、呼び出しがポップアップで行われることです。これらは異なるスコープです。ポップアップからバックグラウンド ページ メソッドを呼び出したい場合は、次を使用しますchrome.extension.getBackgroundPage()

chrome.extension.getBackgroundPage().testRequest();

最終的な注意: マニフェスト バージョン 1 とインライン イベント ハンドラーを使用しています。詳細については、http://code.google.com/chrome/extensions/manifestVersion.htmlを参照してください。

于 2012-08-01T09:17:47.693 に答える