前端内嵌Iframe页面,同源非同源消息通信

本文介绍了如何在前端通过Iframe实现跨域通信,主要利用了Window的postMessage方法。提供了详细的parent.html和children.html的代码示例,详细解析了同源与非同源下的消息传递机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文档地址:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage

原理基于postMessage。

demo例子:

parent.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <h1>父亲页面</h1>
        <button onclick="sendMeg()">发送数据</button>
        <iframe src="children.html" width="100%" height="200px" id="child"></iframe>
    </body>
    <script>
        function sendMeg(){
            var iframe = document.getElementById("child")
            iframe.contentWindow.postMessage('父页面传送的数据','*');
        }
        function callback(){
            console.log(回调)
        }
        // 监听传送到父页面的数据
        window.addEventListener('message',function(data){
            console.
在Vue项目中内嵌iframe时,常常会遇到跨域问题,因为浏览器的同源策略会阻止同源之间的资源访问。为了解决这个问题,可以采用以下几种方法: 1. **使用CORS(跨域资源共享)**: - 在后端服务器上配置CORS头,允许特定的源进行访问。 - 例如,在Nginx服务器上配置: ```nginx add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization'; ``` 2. **使用代理服务器**: - 在Vue项目中配置代理服务器,将请求转发到目标服务器,从而绕过浏览器的同源策略。 - 例如,在`vue.config.js`中配置: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://目标服务器地址', changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 3. **使用`postMessage`进行跨文档通信**: - 通过`postMessage`方法在父页面iframe之间进行通信,从而传递数据。 - 例如,在父页面中: ```javascript const iframe = document.getElementById('myIframe'); iframe.contentWindow.postMessage('Hello, iframe!', 'http://目标服务器地址'); ``` 在iframe页面中: ```javascript window.addEventListener('message', (event) => { console.log(event.data); // 接收父页面发送的消息 }); ``` 4. **使用`document.domain`**: - 将父页面iframe的`document.domain`设置为相同的父域名,从而实现同源。 - 例如: ```javascript document.domain = 'example.com'; ``` 这些方法各有优缺点,具体选择哪种方法需要根据项目需求和环境来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值