公司某個功能用的是iframe,由于跨域的原因,我們不能直接設定父級頁面iframe的高度,是以用了一個中間頁home來完成父級頁面iframe的高度設定,這種中間頁其實很多時候不好用,因為涉及到頁面跳轉和重新整理,每次都得刷一下頁面,而消息發送成功頁的一個定位到頂部的功能,就是由于頁面刷了一次導緻體驗不好,除了體驗,這種中間頁跳轉的做法也很蹩腳和繁瑣。
昨天網上Get了一下iframe的跨域解決方案 找到了一個方法!
postMessage,通過postMessage可以實作iframe的跨域通信。原理是子頁面向父頁面發送消息,父頁面接收消息。
話不多說直接幹貨。
子頁面代碼:
top.postMessage('success', '在這裡填寫父頁面URL');
父頁面代碼:
//響應事件
window.addEventListener('message', function (e) {
var color = e.data;
console.log(color);
if (color == "success")
{
$("#MessageSend").height(600);
$(window).scrollTop(0);
}
}, false);
如上,子頁面向父頁面發送了一條消息 “success”,父頁面擷取消息後判斷消息内容是不是想要的,進而做相應的操作。
上面的代碼還應該完善一下,父頁面接收消息請求的時候,應該驗證域名,總不能随便一個頁面發來消息這邊就處理。