2012-06-29 31 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可以打開一個端口並向後臺腳本發送消息,然後該後臺腳本可以將消息發送回同一選項卡上的內容腳本。