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

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

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

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

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

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

我考虑过输入 <iframe>在后台脚本中并以某种方式在 browser_action 弹出窗口中显示它,但我无法找到如何做到这一点。

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

最佳答案

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

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

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

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

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

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

关于javascript - 如何防止 browser_action 每次都重新加载弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491219/

相关文章:

javascript - 将字符串传递给 jQuery 选择器

javascript - 与 Swing 的超链接

javascript - 如何从页面中临时删除 iframe,然后在不重新下载 iframe 内容的情况下重新添加 iframe?

javascript - 将数据从 Chrome 扩展程序传递到 .net 应用程序

google-chrome - 如何知道 Chrome 中的每个 TAB 数据使用情况?

javascript - 将所有文本输入值添加到一个总量框中

javascript - JS 中的变量重新分配问题,让我无法理解

google-chrome - 允许 Youtube iframe 显示与 Youtube.com 兼容的 Chrome 扩展程序

JavaScript/jQuery 在两个 iframe 之间拖放元素

将 chrome 原生客户端中的 pp::Var 数组转换为 C 整数数组