我的网站有以下条件:
在 Website1 中,我有一个名为“Global.Name”的全局变量。
当 Website1、Subsite1-1 和 Subsite1-2 在同一个域中时,我可以使用 top 作为这三个站点的入口 。
类似的代码如下。
//in subsite1-1, we set the global variable
top.Global.Name = "Jack";
//in subsite1-2, we get the global variable as below
alert(top.Global.Name);
但是,现在的情况是,Website1 和 subsite1-1&subsite1-2 的域现在不同了。
我现在的情况:
网站 1 域:csm.Mysite.com
子站点 1-1 和子站点 1-2 域:csmnew.Mysite.com
现在跨域策略阻止我使用 top 作为门。
在这种特定情况下,是否有任何解决方案来获取/设置全局变量?
(我的意思是 parent 和 child 有不同的子域)。
最佳答案
我在下面编写了代码来替换“顶部”对象。
var mySpace = {};
mySpace.common = {
getDomainTop: function(windowObj) {
var instance = this;
try {
windowObj.frameElement = windowObj.frameElement;
if (windowObj.frameElement === null) {
return windowObj;
} else {
instance.getDomainTop(windowObj.parent);
}
} catch (e) {
return windowObj;
}
}
};
Object.defineProperty(mySpace, "top", {
get: function() {
var instance = this;
try {
top.frameElement = top.frameElement;
return top;
} catch (e) {
return instance.common.getDomainTop(window);
}
}
});
这部分很适合我的情况。
我需要做的另一件事是将“top”替换为“mySpace.top”,如下所示
//top.Global.Name = "Jack";
mySpace.top.Global.Name = "Jack";
关于javascript - 在不同的 iframe 中共享/更改全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30993926/