7

そのため、DomainA にページがあり、Chrome 拡張機能を使用して、DomainB を指す iframe を挿入する JavaScript を挿入しています。

$("body").append("<iframe id='someFrame' src='http://www.domainB.com' width='300' height='800'></iframe>");

また、iframe の contentWindow を取得しようとする JavaScript を DomainA に挿入します。その上で HTML5 postMessage API を使用したいと考えています。

$("body").append("<a class='myLink'>Post Message</a>");
$(".myLink").click(function(){
    var frameElem = document.getElementById("someFrame"); 
    console.log("frameElem: " + frameElem); //succeeds

var contentWin = frameElem.contentWindow;
console.log("contentWin : " + contentWin); //undefined

//can't do this since contentWin is undefined: 
//contentWin.postMessage("data", "*");
});

ただし、contentWindow プロパティは未定義です。それはなぜですか、どうすれば回避できますか? この拡張コードを Web ページに配置すると、それだけで正常に動作します。

ありがとう!

(安っぽいjquery/javascriptを許してください)

4

3 に答える 3

10

私自身の質問に答えるのはちょっとつまらないことは知っていますが、もう少し掘り下げてみたところ、この問題についてChromiumに報告されたバグが見つかりました:http ://code.google.com/p/chromium/issues/detail?id = 20773

クロム拡張機能グループでこのリンクを見つけました:http: //groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/1d4b68f0971ef190/3446a7e82848351c? lnk = gst&q = contentWindow#3446a7e82848351c

于 2010-11-02T17:43:55.280 に答える
1

コンテンツ スクリプトが親ページのウィンドウ オブジェクトにアクセスできないのと同じ理由だと思います。この質問を参照してください。回避策へのリンクがあります。

于 2010-11-01T23:44:26.623 に答える
-1

次の例に示すように、クライアント フレームにリクエストを送信するルート フレームに iframe を埋め込む必要があります。クライアント フレームは、コマンドをルート Web サイトに送り返します。これは「一方向パイプ」ハックとして知られています: http://msdn.microsoft.com/en-us/library/bb735305.aspx
代替テキスト

于 2010-11-02T00:00:34.737 に答える