2012-06-29 34 views
1

我试图从内容脚本注入iframe。从内容脚本中,将消息发布到iframe,没有太多成功。这是我得到的最接近的。控制台中没有错误/警告,但它不起作用(警报测试)。contentscript,动态创建的iframe,postmessage

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:我没有得到它从contentscript到inject.js脚本移动iframe来工作。我想,这不是完全理想的,但我现在确实有工作。

iframe.php

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

不过,我可以做反向,跟来自iframe的父脚本。

+0

您确定在使用'postMessage'时已经加载了框架吗?您是否尝试过注入脚本而不是放弃内容脚本? –

+0

编辑我的操作,但我没有做这个检查,它出现在postMessage发送之前加载。我周围的工作是通过将iframe代码移动到注入脚本并从内容脚本中移出。 – thefoyer

回答

0

我有相反的问题。我试图从iframe中关闭一个透明的iFrame,这需要内容脚本来定位iframe并将其从页面中移除。

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

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

然而IFRAME有一个奇怪的情况下,有任何使用这些方法的麻烦。到目前为止,我所拥有的最好的功能是,iFrame可以打开一个端口并向后台脚本发送消息,然后该后台脚本可以将消息发送回同一选项卡上的内容脚本。