如何在不同的http域之间传递父窗口和子窗口之间的数据?

时间:2014-01-01 00:55:59

标签: javascript window.open

我一直在研究某种“远程控制器”窗口,其中子窗口加载来自父级的销售配置,在更改销售配置并按下“应用”按钮后,销售配置将被发送回父窗口。

在谷歌搜索之后,我发现只有在同一个http://域下打开两个窗口时,父和子之间的数据交换才可用。(我相信这是因为每个服务器都有唯一的SSL。)

然后,这是我的问题:当两个窗口有不同的域时,无论如何我可以在父窗口和子窗口之间交换数据吗?

关于我坚持的情况的更多细节:

  • 我正在尝试制作一个儿童橱窗,让我可以选择在名为'Mr.mine'的小网页游戏中销售哪种金属矿石(mrmine.com)
  • 使用chrome javascript控制台,我已经设法控制了游戏,我可以创建这样的循环来代替我销售
  • 最初,如果我要选择销售哪种矿石,我将不得不从java控制台手动更改名为“sellorder”的数组。结果令人困惑和令人沮丧,因此我想创建一个子窗口,我可以用更简单易懂的布局来配置我的销售决策。
  • 我成功地在我的github存储库中创建了这样一个子窗口,我已经确认父窗口和子窗口之间的数据交换成功,它们都位于同一个github存储库中。

父代码:

    var sellorder=[....] // has some value..

    // some codes in between...

    function sell(){
    var url="https://rawgithub.com/kwagjj/mrmine-macro/master/initializing/sell_window_ver1.0.html"
    var w=window.open(url,"sell_window","width=300,height=450");
    }

子代码:

    var loadarray;
    window.onload=function(){
         loadarray=window.opener.sellorder;}

    // ... after some operations..

    window.opener.sellorder=loadarray;
  • 然后我尝试将这个子窗口弹出代码实现到mr.mine中。
  • 结果证明是失败。我认为这是因为在这种情况下,父窗口和子窗口不共享相同的http://域。

所以这是我的情况。如果没有直接的方法在两个窗口之间交换数据,我想听到任何其他方法来绕过这个问题。

1 个答案:

答案 0 :(得分:0)

“使用chrome javascript控制台”(原文如此)您还可以在页面中添加一些javascript(或者使用像greasemonkey这样的扩展来进行自定义脚本编写)。

在游戏中添加一个带有setInterval函数的脚本,该函数每隔x秒就会与服务器一起调用。并获取配置的json编码数据

另一方面,在验证您的配置时,它将使用Ajax在您的服务器上存储信息(即在文件中)

总结一下:

在父窗口中,当您修改配置时,会进行Ajax调用以将编码的新配置json保存在服务器上的文件中

在带控制台的子窗口(如果没有重新加载)或使用用户脚本扩展名(如GreaseMonkey)中,添加setInterval javascript以从服务器上的文件加载数组。

PS:这是理论上的,而不是邀请你在喜欢的游戏上作弊。