1. http://XXX/a.html(本身的)頁面要操做http://YYY/b.html(其餘域名的) 2. 看了網上不少都是同域名下的,同域名下我本身就改了,還用的上iframe+postMessage?開玩笑
直接操做確定是沒戲,同源策略給你限制的死死的。因此要採用iframe+postMessage
這裏須要用到後端,後端拿到b頁面,將b頁面生存字符串,而後還須要將頁面所引用相對路徑替換成絕對路徑,不如頁面展現以後都是報錯,沒法往下執行.好比頁面引入了一個圖片 <img src='./a.png' />,須要替換成<img src='http://YYY/a.png' /> js ,css同理
<div id='patch'></div> var patchNode = document.getElementById('patch') var objE = document.createElement("div") objE.innerHTML = '請求下來的字符串' patchNode.appendChild(objE)
<iframe id="iframe_child" src="./c.html"></iframe>
a頁面操做以下 發生內容給iframe $(`#iframe_child`).on('load', function(){ // 和iframe通訊 var data = { act: 'article', // 自定義的消息類型。 msg: { subject: '111' } }; // 不限制域名則填寫 * 星號 $(`#iframe_child`).contentWindow.postMessage(data, '*') }); // 對來自 c.html 的消息進行處理 window.addEventListener('message', function(e){ if (e.data.act == 'response') { console.log(`進行接收以後的操做---${e.data.msg.answer}`) } }, false) c頁面操做以下 window.addEventListener('message', function(e){ if (e.data.act == 'article') { var article = e.data.msg console.log(`接收的信息爲`${article.subject}) window.parent.postMessage({ // 傳遞給父頁面單次操做完畢 act: 'response', msg: { answer: '我收到信息了' } }, '*'); } else { console.log('未定義的消息: '+ e.data.act) } }, false); 在c頁面直接操做b頁面的字符串生成的dom,間接實現a操做b頁面
1.爲何不直接在a頁面展現字符串,還要嵌套一個iframe?
css