首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取同一域中url的跨源帧异常,则通过第三方网站的回调打开一个url。

问获取同一域中url的跨源帧异常,则通过第三方网站的回调打开一个url。
EN

Stack Overflow用户
提问于 2019-04-10 14:31:02
回答 1查看 446关注 0票数 0

我试图关闭此页面并使用以下代码刷新父页:

代码语言:javascript
复制
window.opener.windowClosing();
self.close();

我得到了一个错误:

Uncaught :阻止具有原点"aaa.bbb.com“的帧访问跨原点帧。电话: aaa.bbb.com/xxx

尽管这两个urls位于同一个域中,但它仍在发生。我尝试使用"document.domain“检查域,得到以下域名:

代码语言:javascript
复制
aaa.bbb.com - bbb.com

aaa.bbb.com/xxx - aaa.bbb.com

在本例中,aaa.bbb.com/xxx是从第三方集成中调用以提供授权代码的回调url。这个回调url显示的是子域,但是父页面没有显示。

我认为从第三方网站打电话来的网址可能是问题所在。但是,我使用window.open打开这个回调url,并且在关闭它时得到相同的document.domain值和相同的异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 21:46:38

您可以尝试显式地在两个页面上设置document.domain,以便它们匹配。

代码语言:javascript
复制
document.domain = 'aaa.bbb.com';

或者您可以使用window.postMessage()

父文件:

代码语言:javascript
复制
window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
  if (event.origin.indexOf('bbb.com') < 0 {
    return;
  } else if (event.data == 'closing'){
    windowClosing()
  }
}

儿童文件:

代码语言:javascript
复制
window.opener.postMessage('closing', '*');
self.close();

如果子窗口实际上是一个框架或iframe,而不是一个单独的窗口,那么您可以使用:

代码语言:javascript
复制
window.parent.postMessage('closing', '*');
self.close();

在这两种情况下,您都需要确保协议(http/https)和端口对于两个窗口/框架也是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55615124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档