我正在尝试从内容脚本中注入iframe。从内容脚本中,将消息发布到iframe,但没有太大成功。这是我最接近的。控制台中没有错误/警告,但它不起作用(警报测试)。
contentscript:
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"}, "*");
编辑:我试图确保在postMessage之前加载了iframe,即使我在那里发出警报,它也会提醒我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中的父脚本交谈。
答案 0 :(得分:0)
我有相反的问题。我正在尝试从iframe中关闭透明的iFrame,这需要内容脚本找到iframe并将其从页面中删除。
我一直在尝试各种形式的使用:
chrome.extension.sendRequest(function())
var port = chrome.extension.connect({})
var port = chrome.tabs.connect({})
然而,iframe有一个奇怪的上下文,并且无法使用任何这些方法。到目前为止,我所拥有的最好的是iFrame可以打开一个端口并向后台脚本发送一条消息,然后该脚本可以将消息发送回同一选项卡上的内容脚本。