window.opener跨域调用 [英] window.opener cross domain call
问题描述
我有两个子域 www.example.com
和 api.example.com
。在第一个网域的网页上,使用网址 api.example.com/some/url
开启弹出式视窗,并要使用 window.opener
对象将数据传递到父页面。但我收到错误:
I have two subdomains www.example.com
and api.example.com
. On a page from first domain I open popup window with url api.example.com/some/url
and want to use window.opener
object to pass data to parent page. But I get error:
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.
是否可以修复此问题?
推荐答案
可以在www.example.com和api.example.com之间传递数据,但不能与window.opener传递数据。您可以在 .example.com
网域上使用Javascript( document.cookie
)在Cookie中设置值www.example.com),并且可以在www.example.com和api.example.com上阅读。
It is possible to pass data between www.example.com and api.example.com but not with window.opener. You can set a value in a cookie with Javascript (document.cookie
) on the .example.com
domain (not www.example.com) and it will be readable on www.example.com and api.example.com.
在www.example.com的网页上,如果您执行此Javascript:
(来源: http://techpatterns.com/downloads/javascript_cookies.php )
,那么somenamecookie将可从api.example.com读取。
On a page from www.example.com, if you execute this Javascript: (source: http://techpatterns.com/downloads/javascript_cookies.php) then the "somename" cookie will be readable from api.example.com
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");
这篇关于window.opener跨域调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!