首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >window.opener跨域调用

window.opener跨域调用
EN

Stack Overflow用户
提问于 2011-07-30 01:32:07
回答 5查看 15K关注 0票数 1

我有两个子域www.example.comapi.example.com。在来自第一个域的页面上,我使用url api.example.com/some/url打开弹出窗口,并希望使用window.opener对象将数据传递到父页面。但我得到了错误:

代码语言:javascript
运行
复制
Unsafe JavaScript attempt to access frame with URL http://www.example.com/some/page from frame with URL http://api.example.com/some/url. Domains, protocols and ports must match.

有没有可能解决这个问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-30 01:56:01

可以在www.example.com和api.example.com之间传递数据,但不能使用window.opener。您可以在.example.com域(而不是www.example.com)上使用Javascript (document.cookie)在cookie中设置一个值,它将在www.example.com和api.example.com上可读。

在来自www.example.com的页面上,如果您执行以下Javascript:(来源:http://techpatterns.com/downloads/javascript_cookies.php),那么可以从api.example.com读取"somename“cookie

代码语言:javascript
运行
复制
function Set_Cookie( name, value, expires, path, domain, secure )
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct
expires time, the current script below will set
it for x number of days, to make it for hours,
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
} 


Set_Cookie("somename", "somevalue", 0, "/", ".example.com");
票数 2
EN

Stack Overflow用户

发布于 2011-07-30 01:33:47

这不是一个bug,这是一个安全功能。否则,其他人可能会让您的站点从他们的站点打开,并在您的用户不知道的情况下将数据注入您的页面。

阅读:http://en.wikipedia.org/wiki/Same_origin_policy

当然,拥有相同的SLD可能意味着它们来自相同的来源,但这不能保证是这样的,例如,允许免费子域的托管网站将是易受攻击的。

票数 6
EN

Stack Overflow用户

发布于 2014-07-31 07:36:26

代码语言:javascript
运行
复制
<script>
document.domain = 'facebook.com';
try {
    try{
        if (window.opener && window.opener.graphexplorer) {
            window.opener.graphexplorer.authCallback(window.location.hash);
        }
    }catch(e){}
}
catch (e) {}

window.location.hash = '';
window.close();
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6876830

复制
相关文章

相似问题

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