【发布时间】:2021-12-31 11:28:33
【问题描述】:
在 chrome 扩展清单 v3 中,它声明 background.js 现在已替换为 service worker,并且 dom 在 service worker 中不可用。然后建议将undom 或jsdom 用作DOMParser API 的替代方案。
jsdom 等库可用于模拟典型浏览器 窗口环境,包含 DOMParser、事件传播和 其他功能,例如 requestAnimationFrame。重量更轻 像 undom 这样的替代品提供了足够多的 DOM 来支持许多前端 框架和库。
但是undom 太有限了,只能创建元素,但不能查询我需要的 dom 元素,尽管在 service worker 中很容易使用。所以它尝试使用jsdom,它更彻底,缺点是~6MB。
我尝试导入 jsdom 并且我了解到它可以在对 this 问题的评论中使用 browserify 来完成,当我在一个简单的 HTML 文件中使用 browserifyed 包时,它可以按预期工作但不能在chrome 扩展,它给出了这个错误:
ReferenceError: require is not defined.
我使用this回答加载所需的js文件,如下所示:
try {
importScripts('assets/jsdom.bundle.js', 'common.js', 'search.js', 'background.js');
} catch (e) {
console.error(e);
}
并尝试在search.js中这样使用它:
const jsdom = require("./assets/jsdom.bundle");
const { JSDOM } = jsdom;
jsdom 如何在 chrome 扩展服务工作者中正确使用?
【问题讨论】:
-
运行
browserify --standalone以便库设置全局变量JSDOM或jsdom(测试它)。 -
@wOxxOm 感谢您的回复我试过了,我想我已经领先了一步,但似乎
--standalone,我需要改变我对 JSDOM 的使用,但我找不到如何。
标签: browserify jsdom chrome-extension-manifest-v3