2010-09-26 51 views
18

我有一個greasemonkey腳本,它打開一個iframe,其中包含與父頁面不同的子域的表單。

我想,當iframe中表單提交後刷新刷新父頁面

我在那裏我可以執行一個功能的iframe刷新的時候了點,但我不能讓那個功能影響父文件。


我明白這是由於瀏覽器的安全模型,我一直在閱讀使用postMessage在兩個窗口之間進行通信,但我似乎無法弄清楚如何向它的父母發送重載調用。

如何做到這將是非常有益的

感謝使用postmessage刷新iframe的父文檔

任何意見

回答

47

用途:

window.parent.postMessage('Hello Parent Frame!', '*'); 

注 '*' 表示 「任何來源」。如果可能,您應該將其替換爲目標原點。

在你父框架,你需要:

window.addEventListener('message', receiveMessage, false); 

function receiveMessage(evt) 
{ 
    if (evt.origin === 'http://my.iframe.org') 
    { 
    alert("got message: "+evt.data); 
    } 
} 

替換 「my.iframe.org」 與您的iFrame的起源。 (您可以跳過原始驗證,只需非常小心您對獲取的數據所做的操作)。

+0

請注意,IE不支持'addEventListener',所以使用jQuery綁定或someting – 2013-10-17 03:34:49

+1

如果你有多個iframes在彼此你可以用_top_替換_parent_到達最頂端的頁面:'window.top.postMessage(' Hello Parent Frame!','*');' – 2015-01-09 07:04:11