2

1.htm をhttp://127.0.0.1/1.htmlとして開きます

1.html

<!DOCTYPE html>
<html>
<head>

    </head>
    <body>
       <iframe   id="ifr" src="http://localhost/2.html" width="100%" height="300">
       </iframe>       
        <script>  
            iframe=document.getElementById("ifr");
            iframe.contentWindow.postMessage("hello there", "http://localhost");
     </script>  
    </body> 
    </html>

2.html

<!DOCTYPE html>
<html>
<head>
 <script>
    window.addEventListener("message", function(event) {

    alert(hi);
        if (event.data === "hello there" ) {
            alert("Hi" + event.origin);
        }
    }, false );
</script>

<head>
<body>
Hello world
</body>

"

but I have that error: "Unable to post message to   http://localhost. Recipient has origin  http://127.0.0.1/ 

それは簡単な例です。最後に、次のような構造が必要です。ドメイン「A」には iframe があり、その src はドメイン「B」のページです。iframeにはボタンがあります。iframe内に表示されているボタンをクリックすると、ドメイン「A」のwindow.addEventListenerを呼び出す必要があります。どうすればよいですか?

4

3 に答える 3

2

ここで説明されているように。次のオプションしかありません。

同じまたは異なるドメインシナリオ間の通信:

 +-------------------------+-----------+-------------+-------------+
 |                         | home.html | framed.html | helper.html |
 +-------------------------+-----------+-------------+-------------+
 | www.foo.com/home.html   |    N/A    |     YES     |     YES     |
 | www.bar.net/framed.html |    NO     |     N/A     |     YES     |
 | www.foo.com/helper.html |    YES    |     YES     |     N/A     |
 +-------------------------+-----------+-------------+-------------+

これは、CSRF(Cross Site Request Forgery)攻撃に対する純粋なブラウザの制限です。あなたのschenarioを見ると、あなたも同じドメインで働いています。1つのオプションは、上記の階層の例に従うことです。この例では、親サイトのヘルパーページを使用して、同じドメインまたは異なるドメイン内であっても、ページ間でメッセージを渡すことができます。その後、子供はこのヘルパーページを介してメッセージを受け取って送信できます。

于 2013-01-25T17:21:48.640 に答える
1

それによって解決されます:

<iframe id="frameId" src="http://b.net/2.html"  onload="sendCommand();">  No Frame!</iframe>

            <script  type="text/javascript"> 
                    function sendCommand() {
                    var receiver;
                    receiver = document.getElementById('frameId').contentWindow;
                    receiver.postMessage(receiver, 'http://b.net');
                    }
            </script>
于 2013-01-30T10:38:54.447 に答える
1

ホスト ファイル (C:\Windows\System32\drivers\etc) をチェックして、localhost が他のものとしてマップされていないことを確認します。

Javascript を介して子フレームから親フレームにアクセスすることは、セキュリティ上の問題 (クロス サイト スクリプティング) を引き起こすため、このようには機能しないことに注意してください。

于 2013-01-25T17:15:27.523 に答える