如何防止browser_action每次重新加载其弹出窗口?

时间:2017-09-29 14:39:07

标签: javascript iframe google-chrome-extension firefox-addon firefox-webextensions

我正在开发一个webextension,并且我遇到了以下问题。

我有一个browser_action,显示包含一些内容的弹出窗口。问题是,加载需要3-4秒,每次打开浏览器操作时用户都必须等待。

我想以某种方式强制browser_action加载弹出窗口的DOM 一次,所以当我再次打开这个动作时它会显示我已经渲染的窗口。

我无法通过后台脚本预加载任何资源,因为资产是远程网站的<iframe>,您无法轻松地将渲染的DOM存储在localStorage中,以便稍后根据用户请求显示它。

我考虑将<iframe>放在后台脚本中并以某种方式在browser_action弹出窗口中显示,但我没有找到如何做到这一点。

后台页面加载一次并在启用扩展时永远保留,所以也许我可以在browser_action弹出窗口中以某种方式显示它内容?

1 个答案:

答案 0 :(得分:2)

不幸的是,我认为这是不可能的。最好的办法是在iframe加载时显示一些有用的UI。

当然不可能让弹出页面本身持久。

我98%肯定你不能在加载的标签/框架中交换弹出页面。 Chrome有时会在内部执行此操作(预加载然后交换,请参阅tabs.onReplaced),但您无法控制此机制。

您似乎可以使用preload links触发它:

<link rel="preload" href="https://example.com/"
      as="document" crossorigin="anonymous">

然而,将它嵌入到弹出页面中它没有什么用处(它会在弹出窗口加载时获取,这是毫秒的差异)并且我可以合理地确定从后台页面预加载它尽管他们通常共享浏览器进程,但不会继续使用弹出窗口。你可以尝试一下!