【发布时间】:2016-12-14 21:32:19
【问题描述】:
我正在为一个项目构建一个硬件库并使用 JQuery 来触发状态更新。
有一个名为“objectName”的对象。该对象是一组对象的散列,表示为“objectName.childName”。这些对象的一部分是连接和控制硬件(想想通过 USB 到网页的条形码扫描仪)。在连接周期结束时,使用 JQuery 触发“CONNECTED”事件或其他对象。
$(this.childName).trigger("CONNECTED");
//This is the call that fails to propagate (called within the objectName)
最近的一项更改要求我们将导航组件嵌套到 iframe 中,因为硬件连接速度很慢,最好冻结硬件页面。这意味着请求连接的代码在 iframe 内运行并连接到父框架。连接有效,Application/IFrame 页面中的两个对象最终处于相同状态,但触发的事件不会从父框架传播到 iframe。
Application Page (Frozen) -> IFrame Page (Navigational Components)
问题:您究竟如何捕获“objectName”的子级发出的所有事件并将它们向下传播到 iframe,以便 iframe 可以收到连接或其他事件类型的通知?假设 IE11 将是目标浏览器。最好的解决方案是在应用程序页面上运行一些代码,并且不修改 IFrame 页面。
这是将对象从一个传递到另一个的样子。
申请页面
window.requestObject = function (){
return objectName; //This is within the Application Page.
}
IFrame 页面
window.objectName = window.parent.requestObject();
// This is called on every iframe navigation
【问题讨论】:
-
您可以使用
MessageChannel或SharedWorker在父框架和父框架内的<iframe>元素之间进行通信。请参阅How to clear the contents of an iFrame from another iFrame、How can I load a shared web worker with a user-script?。
标签: javascript jquery iframe