PostMessage 頁面之間跨視窗的通訊

2021-10-06 21:56:13 字數 1614 閱讀 8928

window.postmessage() 方法可以安全地實現跨源通訊。通常,對於兩個不同頁面的指令碼,只有當執行它們的頁面位於具有相同的協議(通常為https),埠號(443為https的預設值),以及主機 (兩個頁面的模數 document.domain設定為相同的值) 時,這兩個指令碼才能相互通訊。window.postmessage() 方法提供了一種受控機制來規避此限制,只要正確的使用,這種方法就很安全。

otherwindow.postmessage(message, targetorigin, [transfer]);

從廣義上講,乙個視窗可以獲得對另乙個視窗的引用(比如 targetwindow = window.opener),然後在視窗上呼叫 targetwindow.postmessage() 方法分發乙個 messageevent 訊息。接收訊息的視窗可以根據需要自由處理此事件。傳遞給 window.postmessage() 的引數(比如 message )將通過訊息事件物件暴露給接收訊息的視窗。

父頁面生成按鈕--->生成子頁面--->子頁面定義接收訊息函式 

父頁面傳送訊息按鈕--->在子頁面中接收訊息--->在子頁面中插入

接收的訊息

父的**:

html

頁面跳轉的

給子視窗傳送資訊

js

let suburl = document.queryselector('#changeurl')

let submit = document.queryselector('#submit')

let send = null

suburl.onclick = function()

sendmessage.onclick = function(event) catch(err)

}

子的**

html

js

let temp = document.createelement('p')

debugger;

window.addeventlistener('message',function(event),false)

還有就是下面這種寫法不知道為啥也是不生效的,傳送訊息只能單獨在事件中寫。

let suburl = document.queryselector('#changeurl')

let submit = document.queryselector('#submit')

let send = null

suburl.onclick = function() catch(err)

}// sendmessage.onclick = function(event) catch(err)

// }

子傳父的大多都有,我這裡就不再贅述了。

注意的點:

iframe 物件中有contentwindow屬性,而該屬性下又有postmessage方法。

window.open() 是有返回物件的。返回的物件中又有postmessage方法。

頁面和頁面之間傳輸資料

在頁面和頁面之間傳輸資料的時候 1 可以使用cookie 和 session 2 可以使用from表單傳輸位址的時候 給form 表單的href裡邊的index.php 後邊新增乙個 加上想要傳送的資料.傳輸方法可以使用 post方法,但是在傳資料過去的時候,id值是直接跟在位址列上的,所以是明文傳...

跨域呼叫 postMessage

postmessage語法 環境 頁面a已經將頁面b引入成子頁面,a向它的子頁面b傳資料則需要在頁面中加乙個iframe然後點postmessage。b頁面向a頁面傳資料則直接 window.parent.postmessage data 就可以了 1 父頁面a的語法 document.getele...

跨文件通訊postMessage

window.postmessage message,origin,transfer message 最好是傳遞字串 transfer 不常使用,是一串課message同時傳遞的transferable物件,這些物件的所有權將被轉移給訊息的接收方,而傳送一方不在保留所有權 a.html lang e...