javascript - 闭包编译器修改字符串中的结束括号

标签 javascript google-closure-compiler google-closure

我尝试通过闭包编译器运行以下 Javascript 代码:

var firstRun = eval("<?--#exec cmd_argument='command'-->");

结果是:

var a=eval(" <?--#exec cmd_argument='command'--\x3e")

由于它是一个 SSI 命令,我需要不将 > 转换为 \x3e。我尝试使用 --charset=utf-8US-ascii 作为闭包编译器的输入。我还尝试在字符串中使用 \u003e 。无论我做什么,它都会将 > 输出为 \x3e,这看起来很奇怪,因为它对 <.

没有做同样的事情。

我使用的闭包编译器的输入命令是:

java -jar compiler.jar --js file.js --js_output_file newfile.js

最佳答案

即使有一个编译器选项可以避免这种情况发生,我认为这不是一个好的做法,因为您依赖于编译器输出的内容(即本例中的 SSI 字符串)的精确程度许多不同的表示形式(如您所见,原始字符串已更改)。

编译器这样做是为了避免字符串 --> 在嵌入 HTML 代码时结束 HTML 注释。过去的常见做法是将 JavaScript 封装在 HTML 注释中,以避免在不支持 JavaScript 的浏览器中出现错误。

<小时/>

可能的解决方案:您可以单独包含您的SSI字符串,这样它就不会经过编译过程吗?这样你就可以保证它不会受到编译器的影响。

这可以通过在另一个未编译 JS 文件中包含 SSI 字符串或在已编译 JS 中添加未编译 SSI 字符串来完成输出。像这样的事情:

var MY_GLOBAL_SSI_STRING = "<?--#exec cmd_argument='command'-->";
// compiled code follows...

然后您可以从(要编译的)代码中引用 MY_GLOBAL_SSI_STRING,如下所示:

var firstRun = eval(goog.global['MY_GLOBAL_SSI_STRING']);

希望有帮助。

关于javascript - 闭包编译器修改字符串中的结束括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044549/

相关文章:

google-closure-compiler - 如何让 Jquery 与谷歌闭包编译器一起工作

php - Google Closure Compiler 和 multipart/form-data 不工作

google-closure - 使用Google Closure Library for Google DART吗?

javascript - 在 Closure 中检测接口(interface)和鸭子类型

javascript - 如何同时通过多个请求将数据从 php 传递到 javascript

javascript - Promise.then 不执行

google-closure-compiler - 如何在 Play 2.0 中启用 Closure Compiler 的缩小功能

javascript - 如何将 google Closure 命名空间添加到 Javascript 类

javascript - 语义 ui 的 `gulp build` 给出错误 'ENOENT: no such file or directory'

javascript - Angular 日期问题