如何将数据从远程窗口传回Chrome扩展程序背景页面?

时间:2013-08-22 07:31:18

标签: google-chrome-extension message-passing

我有一个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

中找不到任何相关内容

2 个答案:

答案 0 :(得分:9)

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

您的后台脚本:

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>

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

答案 1 :(得分:0)

我认为您所做的事情并不需要发送消息。 (除非我遗漏了什么。)我正在尝试创建扩展,并需要创建一个弹出窗口来查询用户的某些信息。起初我使用了消息,然后我阅读了以下页面:

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

在你的html页面中包含一个js,它使用extension.getBackgroundPage或runtime.getBackgroundPage [如果你使用的是非持久性背景页面,则使用后者]来获取后台脚本。在您的背景页面上调用函数就像这样容易:

extension.getBackgroundPage()sendDataOrWhateverYouCallIt(数据);