Share/Change 不同iframe中的全局变量
Share/Change global variable in different iframes
我的网站存在以下情况:
在 Website1 中,我有一个名为 "Global.Name" 的全局变量。
当 Website1、Subsite1-1 和 Subsite1-2 在同一个域中时,我可以使用 top 作为这 3 个站点的入口。
类似代码如下
//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作为入口。
对于get/set这种特殊情况下的全局变量有什么解决办法吗?
(我的意思是 parent 和 child 有不同的子域)。
我在下面编写了代码来替换 'top' 对象。
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";
我的网站存在以下情况:
在 Website1 中,我有一个名为 "Global.Name" 的全局变量。
当 Website1、Subsite1-1 和 Subsite1-2 在同一个域中时,我可以使用 top 作为这 3 个站点的入口。 类似代码如下
//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作为入口。
对于get/set这种特殊情况下的全局变量有什么解决办法吗? (我的意思是 parent 和 child 有不同的子域)。
我在下面编写了代码来替换 'top' 对象。
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";