3

我正在尝试在 chrome 扩展的内容脚本中使用 google 闭包库。

这就是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 

我认为一种选择是使用闭包构建器来编译带有闭包代码的 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)
4

1 回答 1

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-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 时。

于 2013-11-18T05:03:31.040 回答