2012-06-29 2 views
1

Я пытаюсь вставить iframe из сценария контента. Из сценария контента отправьте сообщение в iframe без особого успеха. Это самое близкое, что у меня есть. Ошибок/предупреждений в консоли нет, но это не работает (проверка предупреждений).contentscript, dynamic created 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"}, "*"); 

EDIT: Я попытался убедиться, что 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");}); 

Однако я смог сделать наоборот, поговорить с родительского сценария из фрейма.

+0

Вы уверены, что фрейм загружен, когда используется 'postMessage'? Вы пытались внедрить скрипт вместо того, чтобы вызывать скрипт контента? –

+0

Отредактировал мой op, но я сделал проверку на это, и он появляется для загрузки до отправки postMessage. Работа вокруг у меня есть, переместив код iframe на введенный скрипт и из сценария содержимого. – thefoyer

ответ

0

У меня есть обратная проблема. Я пытаюсь закрыть прозрачный iFrame из iframe, который требует, чтобы скрипт содержимого обнаружил iframe и удалил его со страницы.

Я пытался различные формы использования:

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

Однако IFrame имеет странный контекст и имеет проблемы с использованием любого из этих методов. Пока что лучшее, что у меня есть, это то, что iFrame может открыть порт и отправить сообщение в фоновый скрипт, который затем сможет отправить сообщение обратно в сценарий содержимого на той же вкладке.

Смежные вопросы