我的网站有以下条件:






在 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/

10-12 07:37
查看更多