簡體   English   中英

Chrome擴展程序:內容腳本和background.html之間的通信

[英]Chrome extension: Communication between content script and background.html

我是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"
}

請幫忙!

sendRequest / onRequest被替換為Chrome 20中的sendMessage / onMessage*Message不僅僅是*Request的別名,它是一個不同的API。

如果您想支持Chrome <20(許多Ubuntu用戶仍在Chromium 18,因為PPA未更新),請使用onRequestsendRequest 否則,請使用*Message方法。


另一個問題是您的功能位於后台頁面,並且在彈出窗口中進行調用。 這些是不同的范圍,如果要從彈出窗口調用背景頁面方法,請使用chrome.extension.getBackgroundPage()

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

最后說明:您正在使用清單版本1和內聯事件處理程序。 不推薦使用此做法,有關詳細信息,請參閱http://code.google.com/chrome/extensions/manifestVersion.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM