Iframe-Cross-Domain-Problem
P粉939473759
P粉939473759 2023-08-24 09:35:29
0
2
441
<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粉939473759
P粉939473759

Antworte allen(2)
P粉092778585

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','*');
P粉670838735

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

如果您可以控制这两个站点,则可以使用 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('','*');
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!