将数据从Chrome扩展程序传递到网页

时间:2015-05-15 07:21:19

标签: javascript google-chrome-extension

我可以将数据从我的网页传递到Chrome扩展程序。我的代码如下。

var id = "myExtensionId";
    chrome.runtime.sendMessage(id, { messageFromWeb: "Sample message" }, function (response) {
});

我可以在扩展端获取标签ID。但是,如何将数据从扩展名发送回标签?以下代码是否正确?

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        if (request.messageFromWeb) {
            console.log(request.messageFromWeb);
        }

        chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });
    }
);

代码chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });不会抛出错误。  应该如何在网页上收听来自扩展程序的活动?

1 个答案:

答案 0 :(得分:6)

从内容脚本到网站脚本

因为内容脚本和网站中的脚本可以看到相同的DOM,所以您可以使用它来在它们之间进行通信。就像这样简单:

内容脚本:

// data you want to sent
var data = {
    random: 'Some data',
    more: 'More data'
};

// send data through a DOM event
document.dispatchEvent(new CustomEvent('csEvent', {detail: data}));

网站脚本:

// Listen you CRX event
document.addEventListener('csEvent', function (event) {
    var data = event.detail;

    // Do something with you data from CRX
});

从内容脚本到后台脚本

如何操作取决于您需要的连接类型:一次性长期。来自Chrome开发者页面Messaging

  

有一个用于一次性请求的简单API和一个更复杂的API,它允许您使用长期连接来与共享上下文交换多个消息。

如果您只想发回一个回复,这是一个例子:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");

        sendResponse({farewell: "Message back!"});
    });

已编辑将内容脚本添加到网站脚本方式