子頁(iframe.tw)要傳自己的高度給母頁(mother.tw)
/* iframe 的 parent 就是包它的頁面 */
window.addEventListener('load', () => {
const height = document.body.offsetHeight;
parent.postMessage(height, 'https://mother.tw'); // https://mother.tw 就是母頁的網域
});
<iframe id="iframe" src="iframe/index.html"></iframe>
<script>
// 接到 message 要做什麼事的 function
function receiveMessage(e) {
// 來源網址(e.origin)不是指定的網域時
if(e.origin !== 'https://iframe.tw') {
alert('資料來源錯誤');
return false;
}
// 來源網址是指定的網域時
else {
// 拿傳來的參數(e.data)
const height = e.data;
document.getElementById('iframe').setAttribute('height', height); // 改變iframe tag height
}
}
// 監聽 message 事件
window.addEventListener('message', receiveMessage, false);
</script>
母頁(mother.tw)傳訊息給子頁(iframe.tw),讓子頁內容變色。
// 抓到iframe的視窗
const iframe = document.getElementById('iframe2').contentWindow;
// 按鈕click時傳訊息
document.getElementById('blue').addEventListener('click', () => {
iframe.postMessage('lightskyblue', 'https://iframe.tw');
});
// 接到 message 要做什麼事的 function
function receiveMessage(e) {
// 來源網址(e.origin)不是指定的網域時
if(e.origin !== 'https://mother.tw') {
alert('資料來源錯誤');
return false;
}
// 來源網址是指定的網域時
else {
// 拿傳來的參數(e.data)
const bgColor = e.data;
document.querySelector('.box').setAttribute('style', 'background: ' + bgColor);
}
}
// 監聽 message 事件
window.addEventListener('message', receiveMessage, false);
為了認知是iframe,把iframe border給留著。