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