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"}, "*");

編集: 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 から親スクリプトと対話することはできます。

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 に答える