0

まず、私のページからこの iframe を取得します。

<iframe src="https://192.168.100.87/index.html">
   <p>Browser does not support iframe</p>
</iframe>

ページヘッドタグから次のスクリプトがあります。

<head>
   <script type="text/javascript">
       function callMe(){
        alert('called');
       }
   </script>
</head>

そして、リモートマシンのindex.htmlから次のコードを取得しました。

<body>
   <input type="button" value="Click" onClick="window.parent.callMe()" />
</body>

ご覧のとおり、iframe が含まれているメイン ページの関数を呼び出しています。しかし、残念ながら私は関数を呼び出すことができません。

これは可能ですか、ここで何が欠けていますか? ありがとう

4

2 に答える 2

2

別のドメインにあるウィンドウのプロパティにアクセスしたり、メソッドを呼び出したりすることはできません。ただし、postMessage他のドメインのフレームにメッセージを送信するために使用できます ( https://developer.mozilla.org/en-US/docs/DOM/window.postMessageを参照)。

試してみてくださいparent.postMessage('testing', '*');。最初のパラメータは送信するデータです。2 番目は、送信先のウィンドウのドメインです。を使用'*'すると、任意のホストに送信できますが、セキュリティを向上させるために、親の実際のドメインを使用する必要があります。

次に、親ページで:

window.addEventListener('message', function(event) {
    if (event.data == 'testing') {
        callMe();
    }
});

これは最新のブラウザでのみ機能します。古いブラウザー (IE 7 以前など) をサポートする必要がある場合は、postMessage ポリフィルを探してください。

于 2013-03-15T03:55:17.597 に答える
1

コードが実行されているマシンも 192.168.100.87 でない限り、これは不可能です。別のオリジンのページからは何もアクセスできません。https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScriptを参照してください

于 2013-03-15T03:43:55.003 に答える