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

Sob*_*ott 5 javascript google-chrome-extension

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

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

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

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

        chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });
    }
);
Run Code Online (Sandbox Code Playgroud)

代码, chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });不会抛出错误. 如何在网页上收听从扩展中获取事件?

dgi*_*gil 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}));
Run Code Online (Sandbox Code Playgroud)

网站脚本:

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

    // Do something with you data from CRX
});
Run Code Online (Sandbox Code Playgroud)

从内容脚本到后台脚本

如何做到这取决于您需要哪种类型的连接:一次性长期使用.来自Chrome开发者页面消息:

有一个用于一次性请求的简单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!"});
    });
Run Code Online (Sandbox Code Playgroud)

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