我正在构建一个执行大量客户端数据下载和处理的应用程序。数据处理通过在驻留在子域上的iframe中处理而与主应用程序隔离。这是下载数据的iframe。通信是通过postMessage。在同一个域上的不同窗口之间进行通信
一切工作正常,但它可能会更好。
如果用户打开额外的选项卡/窗口,应用程序当前会重新加载所有数据,甚至可能会执行重复的处理工作,这不是一个问题,除了会减慢所有操作并减少页面加载时间。
我想要做的是每个顶级选项卡/窗口只与一个处理iframe进行通信,如果原始窗口关闭,可以恢复。麻烦的是,这些不是通过JavaScript打开,而是通过普通的浏览器方法打开标签中的链接,所以我无法获得发送消息所需的iframe的引用。
是否有反正我可以将iframe的窗口引用传递给其他选项卡,以便它们可以通过postMessage与它进行通信?在某种程度上可以通过共享工作人员来实现吗?
我意识到我可以在整个处理任务中使用共享工作人员,但由于数据来自第三方域,因此无法从工作人员中访问,所以这会产生问题。
只需要与所有主流浏览器的最新版本兼容。
编辑:我刚刚发现SharedWorker尚未在firefox中实现,所以我猜这是行不通的。任何其他方式我可以实现这一目标?
编辑2:我发现,你可以使用:
var win = window.open('', 'my_window_name');
捕捉来自任何其他窗口的iframe的参考。但是,如果iframe尚不存在,则它会将其作为窗口打开。即使它立即关闭,它也会导致闪烁并导致“弹出窗口阻止”消息,使其无法使用。
我想网络工作者是不是一种选择,因为它只会在IE 10中工作;-) –
使用html5 localstorage,可能是? – pahnin
并使用javascript来检查 – pahnin