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); };
在main.html上:
window.onmessage = function(event) { var evt = event || window.event; alert(evt.data); };
該事件的觸發方式與 Rob W 所呈現的方式相同:
document.getElementById('frameId').contentWindow.postMessage('message','*');
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('','*');