iframe+postMessage跨域访问

在实际的开发中,我们可能会遇到在a项目中嵌套b项目的页面,再比如一些门户网站,当在这个网站中要包含一些其他的项目的时候,也可以采用这种方式,在不同的域名之间传递token等信息进行通信。

API详解

起了进程两个来模拟这个通信

父界面的地址为:http://192.168.169.1/test

子界面的地址为:http://192.168.169.1:81/test1

父界面向子界面传递信息:

父界面:

	  <h1>主页面</h1>
      <p class="title" @click="handleANew">发送消息</p>
      <iframe id="child" src="http://192.168.169.1:81/test1" style="width: 100%;height: 800px"></iframe>
      <div>
        <h2>主页面接收消息区域</h2>
        <!-- <span id="message"></span> -->
      </div>

	handleANew() { 
      document
        .getElementById("child")
        .contentWindow.postMessage("hhhhh", "http://192.168.169.1:81/test1");
    },

子界面:

	<h2>子页面</h2>
    <div>
      <h3>接收消息区域</h3>
      <span id="message"></span>
    </div>
    
	<script>
	window.addEventListener(
	  "message",
	  function (event) {
	    console.log(event);
	    document.getElementById("message").innerHTML =
	      "收到" + event.origin + "消息:" + event.data;
	  },
	  false
	);
	</script>

在这里插入图片描述
点击发送消息之后:

在这里插入图片描述
消息就可以传递到子页面了

子界面向父界面传递信息:

子界面:

<script>
    window.addEventListener('message',function(event){
        console.log(event);
        document.getElementById('message').innerHTML = "收到" 
            + event.origin + "消息:" + event.data;
        top.postMessage("子页面消息收到", 'http://192.168.169.1/test')
    }, false);
</script>

父界面:

window.addEventListener('message', function(event){
    document.getElementById('message').innerHTML = "收到" 
        + event.origin + "消息:" + event.data;
}, false);

tip:

1.postMessage和sendMessage(同步)的区分;

2.当使用webpack时 webpack自身会发送postMessage,注意监听message时区分具体是自己发来的message还是webpackOK ;

使用 iframe + postMessage 实现跨域通信(参考链接)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现iframe跨域访问页面,需要满足以下条件: 1. 父页面和子页面都是自己可以控制的。 2. 被嵌入的页面不属于同一个域名、协议或端口号的源。 实现iframe跨域访问页面可以采用以下方法: 1. 使用postMessage:通过在父页面和子页面之间进行消息传递,可以安全地实现跨域通信。父页面可以使用`window.postMessage()`方法向子页面发送消息,子页面可以通过监听`message`事件接收并处理这些消息。这种方式允许双向通信,并且在不同的窗口间传递数据时更加安全可靠。 2. 设置document.domain:如果父页面和子页面具有相同的顶级域名,但不同的子域名,可以通过设置相同的document.domain来实现跨域访问。例如,如果父页面的域名是`example.com`,子页面的域名是`sub.example.com`,可以在父页面和子页面中都设置`document.domain = "example.com"`。这样,它们就可以进行跨域通信。 3. 使用CORS(跨域资源共享):在服务器端配置响应文件的HTTP头,允许来自其他域的页面访问。服务器需要设置特定的响应头,包括`Access-Control-Allow-Origin`来指定允许访问的域名。 总结起来,要实现iframe跨域访问页面,可以使用postMessage、设置document.domain或使用CORS来进行跨域通信。这些方法都可以确保安全地进行跨域访问,并实现在父页面和子页面之间的数据传递和通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo忘川

谢谢老板们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值