11

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

4

2 回答 2

13

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

你的后台脚本:

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>

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

于 2013-08-22T10:19:56.857 回答
0

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

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

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

extension.getBackgroundPage().sendDataOrWhateverYouCallIt(data);

于 2013-08-22T17:32:27.020 回答