Blocked a frame with origin “https://my.xxxxxxx.com“ from accessing a cross-origin frame.

本文介绍了在页面中使用iframe进行登录功能时遇到的跨域问题。由于同源策略限制,直接DOM操作会报错。为了解决这个问题,文章展示了如何使用parent.window.location.href=document.referrer;来刷新父页面。同时,详细讲解了利用postMessage方法进行安全的跨源通信,包括在父页面和子页面中设置事件监听器来传递和接收信息。通过这种方式,可以实现跨域下的DOM操作和参数传递。

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

最近在写一个项目:需要在页面使用iframe来做登陆功能,本想使用parent.window.location.reload();刷新页面的,最后报错了“Blocked a frame with origin "https://my.xxxxxxx.com" from accessing a cross-origin frame”。

很明显这个报错就是跨域的问题,因为iframe遵循"同源策略",所以在不同源的情况下是无法进行DOM操作的。因为我只是需要刷新父级的页面所以我使用了:parent.window.location.href = document.referrer;用来在子级窗口刷新父的页面。

如果需要进行DOM操作或者传参的可以使用 postMessage() 方法用于安全地实现跨源通信,如下:

父级页面:

<div style="margin-bottom: 20px;">
    <button onclick="handleEvent()">向子页面发送信息</button>
</div>
<iframe src="iframe.html" id="iframe"></iframe>
<script>
    function handleEvent() {
        // iframe的id
        var f = document.getElementById('iframe');
        // 触发子页面的监听事件
        f.contentWindow.postMessage('父页面发的消息', '*');
    }

    // 注册消息事件监听,接受子元素给的数据
    window.addEventListener('message', (e) => {
        console.log(e.data);
    }, false);
</script>

子窗口:

<button onclick="handleEvent()">向父页面发送信息</button>
<p>子页面</p>
<script>
    // 注册消息事件监听,接受父元素给的数据
    window.addEventListener('message', (e) => {
        console.log('iframe=' + e.data);
    }, false);

    function handleEvent() {
        // 向父页面发消息
        window.parent.postMessage('子页面发的消息', '*');
    }

</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值