0

私の問題はこれに非常に似ています:親が別のドメインにある場合、別のiframeでjavascript関数を実行します

B.com/page1 と B.com/page2 を含む 2 つの iframe を持つA.comドメイン ページがあります。

B.com/page1 (既にリンクされているページと同じ)のボタンをクリックして、 B.com/page2 iframeで関数を実行する必要がありますが、 jQueryを使用しています。

今、私はB.com/page1でこのコードを使用しています

parent.$(parent.document).trigger("myFunction", [myParams]);

B.com/page2 で取得します

parent.$(parent.frames).bind("myFunction", function (e, value) { localFunction(value); });

これは、B.com/index から page1 と page2 の両方をロードするとうまく機能しますが、A.com からロードするとエラーで失敗します

安全でない JavaScript が、URL B.com/page2 のフレームから URL A.com のフレームにアクセスしようとしています。ドメイン、プロトコル、およびポートが一致する必要があります。

エラーは bind 関数によってトリガーされます。リンクされたトピックで既に述べたように、コードを使用して iframe から同じページ内の他の iframe を参照できます。

parent.frames['page2'].myFunction(args);

しかし、私はまだjavascriptコンソールと別のエラーから同じエラーを受け取ります:

キャッチされていない TypeError: 未定義のメソッド 'myFunction' を呼び出せません

どうすればここから抜け出すことができますか? ありがとうございました!

4

1 に答える 1

0

Henrik からの提案として window.postMessage 関数を使用して解決しました! 私は最初に B.com/page2 postMessage を A.com に、次に A.com postMessage を B.com/page1 にする必要がありました:D 最新の chrome、opera、firefox、つまり 10、ie9、ie8、ie7 で問題なく動作します。 )

B.com/page2 は、次のメッセージを送信します。

parent.postMessage("go!!!!!", $('#parentPage').val());

(「parentPage」と呼ばれる非表示のdivにそのIPを書き込む親ページがありました)その後、親ページはイベントを取得します

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
        //triggered code here
}, false);

これでメッセージを再送信します

win.postMessage(
                "go",
                targetPage);

B.com/page1 は次のメッセージを受け取ります。

window.onmessage = function (e) { /* code here */ }

それが役に立つことを願っています:)

于 2013-01-14T08:54:04.887 に答える