我正在尝试在Chrome扩展程序的内容脚本中使用谷歌闭包库。
这就是 manifest.json
中content_scripts的样子 "content_scripts": [
{
"matches": ["<all_urls>"],
"js": [
"closure-library/closure/goog/base.js",
"content.js"
]
}
我收到以下错误:
goog.require could not find: goog.dom
我认为一个选项是使用closure-builder来编译带有闭包代码的content.js并使用单个输出文件,但是我需要在每次更改content.js后执行此操作。
在内容脚本中是否有其他方法可以使用闭包库?
修改
即使我使用闭包构建器方法,它也无法正常工作。它试图在当前网页所在的域名中查找deps.js。例如。如果是google.com,我会收到如下错误消息:
GET https://www.google.co.in/deps.js 404 (Not Found)
goog.writeScriptTag_
goog.importScript_
(anonymous function)
答案 0 :(得分:1)
为了在chrome扩展中使用闭包库,我们创建了一个空的source.js,它只包含了我们需要的闭包库中的所有模块。
示例source.js
(source.js进入myproject目录。)
goog.provide('myproject.start')
goog.require('goog.dom');
goog.require('goog.dom.query');
goog.require('goog.net.XhrIo');
然后我们在这个文件和闭包库源上使用了closure-builder来生成一个输出文件,其中包含了我们需要的所有闭包库模块的所有相关源。
相关命令:
closure-library/closure/bin/build/closurebuilder.py \
--root=closure-library/ \
--root=myproject/ \
--namespace="myproject.start"
--output_mode=compiled
--compilation_level=SIMPLE_OPTIMIZATIONS
注意,你不能使用ADVANCED_OPTIMIZATIONS
否则所有未使用的功能都将被剥离,这不是我们想要的。
在manifest.json
中包含此内容"js": [
"compiled.js",
"content.js"
]
因此,我们只需要在封闭库代码中包含一些新模块时才需要生成compiled.js
,这很少见,而不是每次我们更改content.js。