我有两个子域www.example.com和api.example.com。在来自第一个域的页面上,我使用url api.example.com/some/url打开弹出窗口,并希望使用window.opener对象将数据传递到父页面。但我得到了错误:
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.有没有可能解决这个问题?
发布于 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
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");发布于 2011-07-30 01:33:47
这不是一个bug,这是一个安全功能。否则,其他人可能会让您的站点从他们的站点打开,并在您的用户不知道的情况下将数据注入您的页面。
阅读:http://en.wikipedia.org/wiki/Same_origin_policy
当然,拥有相同的SLD可能意味着它们来自相同的来源,但这不能保证是这样的,例如,允许免费子域的托管网站将是易受攻击的。
发布于 2014-07-31 07:36:26
<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>https://stackoverflow.com/questions/6876830
复制相似问题