【问题标题】:Pass data from chrome extension to webpage将数据从 chrome 扩展程序传递到网页
【发布时间】:2015-05-15 07:21:19
【问题描述】:

我能够将数据从我的网页传递到 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" }); 不会抛出错误。 应该如何在网页上监听以从扩展中获取事件?

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

    从内容脚本到网站脚本

    因为内容脚本和网站中的脚本可以看到同一个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!"});
        });
    

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

    【讨论】:

    • 我收到以下错误:Uncaught TypeError: Cannot read property 'addListener' of undefined
    • 你在哪里执行了这段代码?是在后台js吗?
    • 我正在执行网页中的脚本。我能够将数据从网页发送到扩展程序。以下是我从扩展接收消息的代码。 var port = chrome.runtime.connect("myExtensionId"); port.onMessage.addListener( function (request, sender, sendResponse) { alert('Got from EXTN'); });
    • 好吧,我没听懂你的意思。所以你已经在页面中有一个内容脚本,并且想要将数据从你的内容脚本发送到网站,对吗?该网站是否归您所有(因此您可以编辑该网站)?
    • 是的,我希望扩展程序与我的网站进行通信
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多