suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Iframe-Cross-Domain-Problem

<p>Angenommen, ich habe eine Website namens example.com mit einem in die Domäne iframe.net eingebetteten Iframe. Jetzt möchte ich den Inhalt des Iframes lesen und einige Parameter übergeben, um eine Textnachricht anzuzeigen. Ich verwende gerne den Benutzernamen Hallo. </p> <p>Das Problem ist nun, dass dadurch keine Verbindung zwischen den beiden hergestellt werden kann oder nicht einmal das innerHTML des Iframes abgerufen werden kann, den ich unten verwende.</p> <pre class="brush:php;toolbar:false;">document.getElementById('myframe').contentWindow.document.body.innerHTML;</pre> <p>Es wird der Fehler „Berechtigung zum Zugriff auf die Eigenschaft verweigert“ ausgegeben.</p> <p>Weiß jemand, wie man auf domänenübergreifenden Plattformen liest und schreibt?</p>
P粉939473759P粉939473759459 Tage vor514

Antworte allen(2)Ich werde antworten

  • P粉092778585

    P粉0927785852023-08-25 08:07:08

    Internet Explorer 8 中,作为参数传递的事件可能为 null,这就是您需要以不同方式访问事件的原因:

    frame.html中:

    window.onmessage = function(event) {
       var evt = event || window.event;
       evt.source.postMessage('Message from iFrame', evt.origin);
    };

    ma​​in.html上:

    window.onmessage = function(event) {
       var evt = event || window.event;
       alert(evt.data);
    };

    该事件的触发方式与 Rob W 所呈现的方式相同:

    document.getElementById('frameId').contentWindow.postMessage('message','*');

    Antwort
    0
  • P粉670838735

    P粉6708387352023-08-25 00:50:36

    如果您无法控制被框架的网站,则无法规避跨域策略。

    如果您可以控制这两个站点,则可以使用 postMessage 跨域传输数据的方法。一个非常基本的例子:

    // framed.htm:
    window.onmessage = function(event) {
        event.source.postMessage(document.body.innerHTML, event.origin);
    };
    
    // Main page:
    window.onmessage = function(event) {
        alert(event.data);
    };
    
    // Trigger:
    // <iframe id="myframe" src="framed.htm"></iframe>
    document.getElementById('myframe').contentWindow.postMessage('','*');

    Antwort
    0
  • StornierenAntwort