1

我正在尝试从内容脚本中注入 iframe。从内容脚本中,向 iframe 发布消息,但没有多大成功。这是我得到的最接近的。控制台中没有错误/警告,但它不起作用(警报测试)。

内容脚本:

var iframe = document.createElement("iframe");
iframe.setAttribute("src", "https://www.com/iframe.php");
iframe.id = "iframe01";
document.getElementsByTagName("body")[0].appendChild(iframe);

//then I inject this "web_accessible_resources" script

var script = document.createElement("script");
script.type = "text/javascript";
script.src = chrome.extension.getURL("postMessage.js");
document.getElementsByTagName("head")[0].appendChild(script);

postMessage.js

window.postMessage({msg: "test"}, "*");

我也试过

top.postMessage({msg: "test"}, "*");

var iframe = document.getElementById('iframe01');
iframe.contentWindow.postMessage({msg: "test"}, "*");

编辑:我试图确保 iframe 在 postMessage 之前加载,即使我在那里发出警报,它也会提醒我 iframe 已加载。

var iframe = document.getElementById('iframe01');
if (ifrm_prsto.contentWindow.document)
    //do postMessage

EDIT2:我确实通过将 iframe 从 contentscript 移动到 inject.js 脚本来使其工作。并不完全理想,但我想我现在确实可以使用它。

iframe.php

window.addEventListener("message", function(e) {alert("test");});

然而,我可以做相反的事情,从 iframe 与父脚本交谈。

4

1 回答 1

0

我有相反的问题。我正在尝试从 iframe 中关闭透明 iFrame,这需要内容脚本找到 iframe 并将其从页面中删除。

我一直在尝试各种形式的使用:

chrome.extension.sendRequest(function())
var port = chrome.extension.connect({})
var port = chrome.tabs.connect({})

然而,iframe 有一个奇怪的上下文,并且在使用这些方法中的任何一个都有问题。到目前为止,我所拥有的最好的是 iFrame 可以打开一个端口并向后台脚本发送消息,然后后台脚本可能能够将消息发送回同一选项卡上的内容脚本。

于 2012-10-25T23:51:10.650 回答