幾年前頁面裡使用iframe巢狀使用的還是很多的。
以下是多種使用方法:
1、同域下巢狀:
父頁面:
window.οnlοad=function()
function fu()
子頁面:
父頁面呼叫子頁面:
iframename.window.document.xx
iframename.window.function
idel.contentwindow.document.xx
idel.contentwindow.function
子呼叫父頁面:
parent.document.xx
parent.function
2、跨域下hash傳遞值:
在頁面如果只是修改了url的標籤符頁面是不會重新整理的。
但會觸發hashchange方法
可以利用這個來實現雙方通訊
父頁面:
子頁面:
修改hash傳遞值
父和子頁面繫結onhashchange
通過location.hash來獲取#xx
父頁面修改url
idel.contentwindow.location.href='xx#xx'
子頁面修改url
window.parent.location.href='xx#xx'
3、子頁面單方面傳遞值到父通過window.name 或#has
window.name屬性它不論同源,只要在同一視窗,前頁面修改了name,後載入的頁面是可以訪問到的。
可以利用這點在b.com頁面下設定name然後跳轉到a.com b的頁面。
此頁面獲取到name再呼叫父頁面也就是a.com a的方法了。
或者a頁面監聽firame的load事件然後獲取name
其實b.com頁面可以通過url把值傳遞給a.com b。
b收到後因為是同源所以可以呼叫父方法和el把值傳遞。
a.com a:
b.com
傳遞值
a.com b:
以上這些取巧的方法以前是經常用的。
現在有了html5,有了新的辦法:
4、postmessage
為window增加了postmessage(),允許跨域通訊
其引數1:傳送的內容,引數2是接收訊息的視窗的源,也就是url,當然也可以用*.向所有視窗傳送
子視窗向父視窗也類似:
opener.postmessage('xx','url')
opener 屬性返回建立此視窗的window物件引用
父子視窗通過監聽message來獲取值
event.source 傳送訊息視窗
event.origin:訊息發向的視窗
event.data訊息內容
source 可判斷傳送源url,進行過濾
父頁面:
frame color
子頁面:
click to change color
還有一種跨域寫法:
a.com 上的a頁面巢狀了b.com 上的b頁面。b需要和a通訊。
b頁面上又巢狀 了a.com 上的c頁面。
b頁面不直接和a頁面通訊,b修改c url 的hash。
c監聽onhashchange獲取值。
由c和a頁面通訊,因為c和a是在同域下的。
c可以用parent.parent.fn() 來向a傳遞值。
因為是三層巢狀所以要兩次parent.
通過iframe實現post 提交。
以前在post提交時form 時不想跳轉頁面,就有一利用target 提交到iframe
iframe來接收資訊。
如果想父頁面知道接收資訊,可以在伺服器返回時輸出script
window.parent.fn(xx) 呼叫父級方法把資訊傳遞。
iframe跨域通訊
簡述 window.postmessage方法,允許跨視窗通訊,不論這兩個視窗是否同源。視窗都可以通過message事件,監聽對方的訊息。語法 otherwindow.postmessage message,targetorigin,transfer message 傳送的內容。targetorgi...
iframe跨域通訊
重點來了 貼 父級頁面傳送資訊給子級 var son document.getelementbyid st st為子級iframe的id url可以為純網域名稱也可以為 當為 時所有子級都會接收到 當為純網域名稱時,只有這個網域名稱才會收到 url message為你要傳送的訊息 message 我...
iframe跨域通訊 postMessage
一 跨域通訊概述 messageevent 四個屬性 message 型別 data window.postmessage的第乙個引數 origin 呼叫postmessage時頁面的當前狀態 source 呼叫postmessage的視窗資訊 二 postmessage語法 window.post...