【问题标题】:javascript: how to communicate between 2 windows? [duplicate]javascript:如何在 2 个窗口之间进行通信? [复制]
【发布时间】:2015-07-23 21:32:37
【问题描述】:

我了解如何打开窗口并在打开第二个窗口的原始窗口和第二个窗口之间进行通信以与原始窗口进行通信。但是,我有一种情况,我有原始页面和第 1 页。这些页面是 2 个不同的 PHP 脚本,它们作为单独的页面运行。

第 1 页打开一个窗口,其中包含客户网页。我们将此窗口称为 1。

原始页面打开窗口 2 和窗口 3。这些窗口加载到包含编辑工具的 php 文件中。我需要这些窗口 2 和窗口 3 与原始页面通信以编辑窗口 1 的内容。我不明白这怎么可能。 我只看到有关原始页面的教程和书籍,它创建的窗口是唯一可以相互访问的窗口。所以,理论上我知道我不能让原始页面与窗口 1 通信,因为窗口 1 是由页面 1 创建的。

有没有办法解决这个问题?第 1 页打开内容...如图像、网页...等。我已经这样设置了。我需要能够让我的窗口工具访问内容窗口。这样他们就可以编辑网页或图像。如果可能的话,我该怎么做?

不,这不是同一个问题。我需要修改文档以更改 html。所以,使用 cookie 并不能解决我的问题。我需要编辑由不同网页打开的另一个窗口中的内容,但它仍然是同一域的一部分。

【问题讨论】:

  • 如果这些页面都在同一个域中,并且 I understand how to open windows and communicate between the original window 比...
  • 所有页面都在同一个站点上吗?如果是这样,storage 事件是避免保留窗口句柄的非常方便的方法。
  • C=页面创建A、B。你想在A和B之间进行通信吗?
  • 是的,它使用的是同一个域。只是网站的2个不同网页会打开一个窗口。例如:第 1 页打开第 1 窗口,第 2 页打开第 2 窗口。如果第 1 页没有打开那个窗口,它如何访问窗口 2?

标签: javascript jquery popupwindow window-object


【解决方案1】:

21 年 5 月更新

供参考:https://github.com/dboots/crossWindowAjax

演示: http://www.donboots.com/so/index.phphttp://www.donboots.com/so/index2.php

这是使用 github 存储库中的 /js/editor.js 文件的窗口之间相当基本的轮询解决方案/

/index.php, /index2.php - 这些只是打开我们的弹出窗口。

/colors.php, /tools.php - 我们的弹出窗口包含 poll() 函数,也有使用 set() 函数的示例。这两个都是位于 /js/editor.js 中的自定义函数

/js/editor.js - 这是我们的弹出窗口和 PHP 文件 (/js/ajax/process.php) 之间的桥梁。

/_classes/Editor.php - 这是 /js/ajax/process.php 用来设置/获取变量的类。在本例中,它设置/获取 $_SESSION 变量,但该类可以扩展为使用任何类型的文件存储、数据库等。

原始答案(不相关)

我想这可以通过折腾窗口变量范围来解决。

此方案是否符合您的需求?

窗口 1

//-- window 1 variable
var page_variable = "page_variable";

//-- handle for window A
var windowA = window.open('windowA.php', 'windowA', 'height=200,width=600');

//-- handle for windowB
var windowB = window.open('windowB.php', 'windowB', 'height=400,width=500');

windowA.php

//-- local windowA variable
var windowA_variable = "windowA Variable";

//-- windowB variable accessed via opener (window 1)
var windowB_variable = opener.windowB.windowB_variable;

//-- window 1 variable
var page_variable = opener.page_variable;

windowB.php

//-- local windowB variable
var windowB_variable = "windowB Variable";

//-- windowA variable accessed via opener (window 1)
var windowA_variable = opener.windowA.windowA_variable;

//-- window 1 variable
var page_variable = opener.page_variable;

【讨论】:

  • 否,在您的示例中添加窗口 1 和窗口 2,然后打开窗口 a 和 B。如果窗口 1 打开窗口 a,窗口 2 打开窗口 b。窗口 1 是否有可能访问窗口 b,即使它一开始没有打开窗口 b?您显示的代码是开放的。它指的是打开窗口的原始窗口。我说的是有 2 页。一页打开一个窗口,另一页打开另一个窗口..这些页面如何与它们未打开的窗口通信?
  • 示例:网页1打开窗口A,网页2打开窗口b。如果网页1没有打开那个窗口,它如何访问窗口b?窗口 A 仅由网页 1 打开。窗口b被网页2打开了。网页2如何访问窗口A和网页1访问窗口b?
  • 根据我的研究,您需要结合使用 ajax 和一些 PHP 代码来获取/设置属性并使用长轮询。不确定您是否需要严格使用 javascript 来操作窗口,但这将是我的解决方案。如果这听起来适用,我可以提供帮助。否则,一些替代方案将可能使用 PostMessage (bit.ly/1F7OCq0) 或 HTML5 WebSockets (bit.ly/18Uy8WA) 进行跨窗口消息传递。
  • 这是不可能的。我正在制作网页布局编辑器。您可以一次打开多个网页。我有 1 个处理网页、图像、多媒体的 php 文件,以防止热链接内容。因此,该文件会加载到上传或创建的网页、图像、视频列表中。当您单击图像或网页时,它会加载到他的 javascript 中。它在新窗口中打开它。这可用于查看内容或对其进行编辑。为了编辑它。你需要点击一个工具按钮。这将打开另一个窗口......但该按钮在主页上。所以,有 2 个不同的页面...
  • 2 个不同的页面,最终打开 2 个不同的窗口。一个在窗口中打开内容。另一个打开工具窗口。我需要能够使用该工具窗口来编辑选定的内容窗口。从理论上讲,我不认为我可以直接访问每个窗口,因为每个窗口都由 2 个不同的网页打开...... 2 个不同的 php 脚本回显了 JavaScript。
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2015-08-04
  • 2023-03-10
相关资源
最近更新 更多