我正在做一个项目,在这个项目中,我有一个下面提到的场景
父域:www.exampledomain.com
子域:www.someotherdomain.com
例如,我的父域是www.exampledomain.com。在我的父域名中,我有一个名为capture的按钮。单击此按钮时,我正在使用javascript 在新选项卡中加载子域,该子域的URL为www.someotherdomain.com
在新选项卡中加载子域URL的同时,我正试图将事件侦听器从父域附加到子域。
我正在尝试在父域中查找在子域中执行的捕获所有单击操作。
我知道CORS,但我想使用JavaScript来实现这一点。
有可能吗?非常感谢任何指点。
浏览器不允许您以任何方式直接访问包含来自其他域的页面的浏览器窗口(出于安全原因)。因此,您根本无法将事件侦听器直接添加到任何域的页面。
你可以做的是让两个页面合作(根据这样的理论,如果它们专门合作在一起,那么在安全方面肯定是可以的)。但是,即使在合作的情况下,也不能让域为A的页面将事件侦听器添加到域为B的页面中
您可以使用window.postMessage()
将某种命令发送到另一个窗口,而另一个窗具有,然后执行DOM操作本身。当然,你可以发送window.postMessage()
从另一个窗口请求一些信息,然后另一个窗户会有一个侦听器来处理你的特定请求,它会得到这些信息并将数据发回。这种结构显然需要两个完全协作的页面。出于安全原因,您可以(也应该)限制您愿意接受来自哪些域的消息。有关更多详细信息,请参阅window.postMessage()
的MDN文档。
关于您的具体问题:
我正在尝试查找捕获在child中执行的所有单击操作父域中的域。
您不能从父域执行此操作。您可以从父域向子域发送一条消息,要求子域在自身上设置请求的单击处理程序,然后在每次单击时向window.postMessage()
发送数据。大多数工作都必须在子窗口中使用自己的代码来完成。