Javascript 如何在不同http域的父窗口和子窗口之间通信数据?

Javascript 如何在不同http域的父窗口和子窗口之间通信数据?,javascript,window.open,Javascript,Window.open,我一直在开发某种“遥控器”窗口,其中子窗口从父窗口加载销售配置,在更改销售配置并按下“应用”按钮后,销售配置将发送回父窗口 在谷歌搜索之后,我发现只有在同一个http://域下打开两个窗口时,父窗口和子窗口之间的数据交换才可用。(我相信这是因为每个服务器都有唯一的SSL。) 然后,我的问题是:当两个窗口具有不同的域时,是否可以在父窗口和子窗口之间交换数据 更多关于我陷入困境的细节: 我正试图制作一个儿童窗口,让我在一个名为“Mr.mine”(mrmine.com)的小型网络游戏中选择要出售的金

我一直在开发某种“遥控器”窗口,其中子窗口从父窗口加载销售配置,在更改销售配置并按下“应用”按钮后,销售配置将发送回父窗口

在谷歌搜索之后,我发现只有在同一个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://域
这就是我的情况。如果两个窗口之间没有直接交换数据的方法,我希望听到任何其他方法甚至可以绕过这个问题。

“使用chrome javascript控制台”(sic),您还可以向页面添加一些javascript(或者使用像greasemonkey这样的扩展来定制脚本)

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

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

总而言之:

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

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


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

你有没有尝试过使用jQuery或vanilla JS
data
方法在家长和孩子之间交换数据?@DevlshOne我没有听说过jQuery的.data()函数,但我现在正在研究它。。。那么这个函数能绕过“两个http://域”问题吗?是的,它能。它能够在元素之间交换数据。本质上,您应该能够在父级中设置
.data()
,然后在任何子级中检索它,而不会出现任何问题。@DevlshOne谢谢!一旦我掌握了jQuery,我会尝试一下!要发回信息,您可以想象您的setInterval函数定期将信息保存到另一个文件中,并且在父窗口中有一个“更新”按钮来获取信息。。。我想我得先研究一下jQuery.data(),不是吗?我不太了解数据函数,但我不确定它是否适合您的需要。