【问题标题】:How to prevent browser_action from reloading its popup window every time?如何防止 browser_action 每次都重新加载其弹出窗口?
【发布时间】:2017-09-29 14:39:07
【问题描述】:

我正在开发一个网络扩展程序,但遇到以下问题。

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

我希望以某种方式强制 browser_action 仅加载弹出窗口的 DOM 一次,因此当我再次打开此操作时,它会显示已渲染的窗口。

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

我曾想过将<iframe> 放在后台脚本中,并以某种方式在 browser_action 弹出窗口中显示它,但我不知道该怎么做。

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

【问题讨论】:

  • 如果不需要交互(js),可以将整个HTML和所有CSS存储为纯文本,然后直接写入iframe即可。
  • “他的问题是,加载需要 3-4 秒” - 这听起来像是你的实际问题。优化页面,而不是弹出窗口?
  • 我已经在问题中说明了它是远程网站(WhatsApp Web 要清楚)。我无法优化它。

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


【解决方案1】:

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

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

而且我 98% 肯定,您不能将已加载的选项卡/框架交换到弹出窗口的页面中。 Chrome 有时会在内部执行此操作(预加载然后交换,请参阅 tabs.onReplaced),但您几乎无法控制此机制。

看来你可以用preload links触发它:

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

但是,将它嵌入到弹出页面中几乎没有什么作用(它将在弹出页面加载时被获取,这是几毫秒的差异)并且我有理由确定从背景页面预加载它不会'尽管它们通常共享浏览器进程,但仍保留到弹出窗口。不过你可以尝试一下!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多