簡體   English   中英

從擴展程序到內容腳本的Chrome擴展消息傳遞

[英]Chrome extension messaging from popup to content script

我試圖將消息從我的popup.js發送到content.js,但我不明白為什么它不起作用。

這是我的設置:

的manifest.json

{
    "manifest_version": 2,

    "name": "Form Builder",
    "description": "This extension populates a form.",
    "version": "0.1",

    "content_scripts": [{
        "all_frames": true,
        "matches": ["http://*/*", "https://*/*"],
        "js" : [
            "/js/jquery/jquery.min.js", 
            "/js/formLoader.js",
            "/js/content.js"
        ]
    }],

    "options_page": "/html/options.html",
    "permissions": ["https://localhost:8443/", 
                    "tabs", "activeTab", "storage", "background"
    ],
    "icons": { "16": "/images/icons/wb_icon_16.png",
               "48": "/images/icons/wb_icon_48.png",
              "128": "/images/icons/wb_icon_128.png" 
    },
    "browser_action": {
        "default_popup": "/html/popup.html"
    }
}

content.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){
    sendResponse("received message: " + request);
    formLoader.setFormData(request, sendResponse);

    // Why isn't this getting executed when I send a message from popup?

    sendResponse("Thank you");
});

popup.js

var popup = {
    // a few parts snipped out for brevity
    sendMessage: function(message) {
        chrome.tabs.sendMessage(tab.id, message, function(message) {
            console.log(chrome.runtime.lastError);
            popup.handleCallbacks(message);
        });
    },
    handleCallbacks: function (message)  { 
        console.log("handleCallbacks: " + message);
    }
}

formLoader.js

var formLoader = {
    init : function() {
        $("#PostingBody").val("formLoader.init");
    },
    setFormData: function(data, callback) {
        callback("[formLoader.js] got data: " + data);
    }
}

formLoader.init();

當我做類似的事情時:

popup.sendMessage(data);

在我的控制台中,我得到:

Object {message: "Could not establish connection. Receiving end does not exist."}
handleCallbacks: undefined

為什么沒有接收端? 我對content.js中的偵聽器有什么錯?

感謝: 來自另一個問題的答案

對於Chrome 26+,請使用chrome.runtime.onMessage和chrome.runtime.sendMessage。

即使我很肯定,我也發現了幾頁並沒有提及此內容的參考。

暫無
暫無

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

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