我正在构建一个执行大量客户端数据下载和处理的应用程序。通过在驻留在子域上的 iframe 中进行处理,数据处理与主应用程序隔离。正是这个 iframe 下载数据。通信是通过 postMessage 进行的。
一切正常,除了它可能会更好。
如果用户打开额外的选项卡/窗口,应用程序当前会重新加载所有数据,甚至可能会重复处理工作,这不是问题,只是它会减慢一切速度并且页面加载时间更长。
我想做的是让每个顶级选项卡/窗口仅与一个处理 iframe 通信,如果原始窗口关闭,则可以恢复该 iframe。问题是,这些不是通过 javascript 打开的,而是通过普通的浏览器方法打开选项卡中的链接,所以我无法获得对发送消息所需的 iframe 的引用。
无论如何我可以将 iframe 的窗口引用传达给其他选项卡,以便他们可以通过 postMessage 与之通信?这可以通过使用共享工作者以某种方式实现吗?
我意识到我可以使用共享工作者来完成整个处理任务,但这会有它自己的问题,因为数据来自第三方域,无法从工作者内部访问。
只需要与所有主要浏览器的最新版本兼容。
编辑:我刚刚发现 SharedWorker 尚未在 Firefox 中实现,所以我想这不会起作用。我还有其他方法可以实现吗?
编辑2:我发现你可以使用:
var win = window.open('', 'my_window_name');
从任何其他窗口捕获对 iframe 的引用。但是,如果 iframe 尚不存在,则它将作为窗口打开。即使它立即关闭,它也会导致闪烁并导致“弹出阻止”消息,使其无法使用。