Chrome说我的内容脚本不是UTF-8

时间:2018-04-23 10:56:03

标签: google-chrome-extension utf-8 character-encoding clojurescript

收到错误Could not load file 'worker.js' for content script. It isn't UTF-8 encoded.

> file -I chrome/worker.js
chrome/worker.js: text/plain; charset=utf-8

to-utf8-unix

> to-utf8-unix chrome/worker.js                                      
chrome/worker.js
----------------
Detected charset:
UTF-8
Confidence of charset detection:
100
Result:
Conversion not needed.
----------------

我也试过来回转换Sublime Text的文件而没有任何运气。

清单:

  "content_scripts": [{
      "matches": ["http://foo.com/*"],
      "js": ["worker.js"]
  }],

相关文件:https://www.dropbox.com/s/kcv23ooh06wlxg3/worker.js?dl=1

这是一个已编译的javascript文件,使用cljsbuild从clojurescript中吐出:

               {:id "chrome-worker"
                :source-paths ["src/chrome/worker"],
                :compiler {:output-to "chrome/worker.js",
                           :optimizations :simple,
                           :pretty-print false}}
               ]}

其他文件(选项页面,背景)以相同的方式编译,不会生成此错误。我试图摆脱像Emojis这样奇怪的角色,但这并没有解决问题。

4 个答案:

答案 0 :(得分:3)

事实证明这是一个问题,在谷歌闭包编译器中,clojurescript用来生成javascript - https://github.com/google/closure-compiler/issues/1704

解决方法是将编译设置为“US-ASCII”

:closure-output-charset "US-ASCII"

感谢来自clojurians的pesterhazy,帮助解决这个问题!

答案 1 :(得分:0)

如果您使用的是Webpack,则可以通过将默认的缩小器 Uglify 替换为 Terser 来解决,而不会产生那些编码问题。

在您的 webpack.conf.js 中添加

const TerserPlugin = require('terser-webpack-plugin');

// add this into your config object
optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        parallel: true,
        terserOptions: {
          ecma: 6,
          output: { 
             ascii_only: true 
          },
        },
      }),
    ],
  },

答案 2 :(得分:0)

在写字板中编辑工作源代码后抛出此错误。当我在写字板中保存文件时,编码丢失了。要修复它,请在记事本中打开相同的文件,另存为,然后在保存按钮旁边的编码下拉菜单中指定“UTF-8”。

答案 3 :(得分:0)

如果有人在 Parcel 上遇到这个问题,只需添加一个包含此内容的 .terserrc 文件即可。

{
 "ecma": 6,
 "output": {
   "ascii_only": true
  }
}

这是@marian-klühspies 回应的改编版https://stackoverflow.com/a/58528858/2920671