Uncaught DOMException: Blocked a frame with origin 跨域问题解决方法

本文介绍了一种使用postMessage方法解决跨域传值问题的方法,详细展示了如何在layer框架的弹出层与父页面间进行安全有效的数据交互。

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

最近写的项目需在弹出层中调用其它系统的页面,并获取选中的内容,但是遇到Uncaught DOMException: Blocked a frame with origin "url" from accessing a cross-origin frame.这个问题。

使用postMessage()方法可以解决跨域传值的问题,这里贴上posetMessage的API

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage

废话不多说直接上代码

我是使用的layer这个前台框架,所以可能和使用window.open()这种方式打开的弹出层有点不同。

父页面

layer.open({
    //layer弹出层成功打开后,发送消息给子页面
    success: function (layero, index) {
      var data = $('[id*="id"]').val()
      //因为是公司内网,所以url使用的*
      window[layero.find('iframe')[0]['name']].postMessage(data, '*');
     },
    //点击页面的确认按钮后获取子页面的返回值
     yes: function (index, layero) {                       
        //发送一个'return',表示子页面需要返回值
        window[layero.find('iframe')[0]['name']].postMessage('return', '*')
        layer.close(index);
    }
});

//监听子页面的postMessage
function receiveMessage(event) {
     console.log(event.data)//取得子页面传回来的值
     $("#id").val(event.data)
 }
 window.addEventListener('message', receiveMessage, false);

这里贴上一段关于Url参数的说明,各位使用的时候要注意一下安全问题

子页面接收父页面发送的值

window.addEventListener('message',function(e){    
    var value = e.data;
    //子页面如果接收到的data的值是'return',则调用返回方法向父页面发送数据
    if (value != null && value == 'return')
        //返回数据
        returnSelectUser()
    else if (value != null && value.trim().length != 0) {
        //do something      
    }
}, false);

//向父頁面发送數據
function returnSelectUser() {
    var value = $("#id").text();
    console.log(value)
    parent.postMessage(value, "*");    
}

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值