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";