【问题标题】:How do I pass back data from a remote window to a chrome extension's background page?如何将数据从远程窗口传回 chrome 扩展背景页面?
【发布时间】:2013-08-24 19:38:13
【问题描述】:

我有一个 chrome 扩展,并从我的背景页面打开一个远程窗口:

chrome.windows.create({
        type : 'popup',
        url : "https://www.example.com/mypage.html"
    }, function(newWindow) {

    });

在我的远程页面 (https://www.example.com/mypage.html) 上,我正在等待用户执行操作。执行此操作时,我需要向扩展程序传回一些数据。

我该怎么做?我在文档中找不到任何相关内容 (http://developer.chrome.com/extensions/messaging.html)

【问题讨论】:

  • @RobW 谢谢。尝试了“从网页发送消息”部分,但我知道“'externally_connectable' 需要 Google Chrome 开发通道或更新版本,这是稳定的通道。”。这怎么可能在生产中工作?奇怪的是,我找不到这种交流的完整示例,如果您有的话,将不胜感激。

标签: google-chrome-extension message-passing


【解决方案1】:

基本上是可以的。您应该做的是使用内容脚本作为新创建的窗口和后台脚本之间的桥梁。例如:

你的后台脚本:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    alert("message received");
});
chrome.windows.create({
    type : 'popup',
    url : "http://yoursite.com/page.html",
    type: "popup"
}, function(newWindow) {

});

您的内容脚本:

document.addEventListener("hello", function(data) {
    chrome.runtime.sendMessage("test");
})

page.html:

<script>
    var go = function() {
        var event = document.createEvent('Event');
        event.initEvent('hello');
        document.dispatchEvent(event);
    }
</script>
<a href="javascript:go();">Click me</a>

因此,我们的想法是使用文档对象从页面分派一个事件。内容脚本会监听该事件,一旦发生,就会向您的代码最初所在的后台脚本发送一条消息。

【讨论】:

  • 重要的是要注意 yoursite.com 必须包含在“content_scripts”下的 manifest.json 文件中...“matches”:[此处]。你的回答让我头疼,谢谢。
【解决方案2】:

我相信消息对于您正在做的事情来说不是必需的。 (除非我遗漏了什么。)我正在尝试创建一个扩展,并且需要创建一个弹出窗口来向用户查询一些信息。起初我使用消息传递,然后我阅读了以下页面:

http://developer.chrome.com/extensions/event_pages.html

在您的 html 页面中包含一个 js,它使用 extension.getBackgroundPage 或 runtime.getBackgroundPage [如果您使用的是非持久性背景页面,请使用后者] 来获取后台脚本。在后台页面上调用函数可能很容易,如下所示:

extension.getBackgroundPage().sendDataOrWhateverYouCallIt(data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多