关于javascript:Chrome浏览器使用的用户脚本元数据

Userscript metadata eaten by Chrome

Chrome似乎正在吞噬我的用户脚本元数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 // ==UserScript==
 // @name Flag Offtopic button
 // @version 1.0
 // @description Vote-to-off-topic button
 // @author Manish Goregaokar (http://stackapps.com/users/10098/manishearth)
 // @license GNU GPL v3 (http://gnu.org/copyleft/gpl.html)
 // @include http://meta.stackexchange.com/questions/*
 // ==/UserScript==

function with_jquery(f) {
     var script = document.createElement("script");
     script.type ="text/javascript";
     script.textContent ="(" + f.toString() +")(jQuery)";
     document.body.appendChild(script);
};

//(rest of script availible on request)

脚本可以工作,但是元数据不能工作(它尝试在每个站点上运行,文件名显示而不是"flag offtopic but t on"等)

我不熟悉用户脚本,所以我不知道自己做错了什么。毫无疑问,这是愚蠢的。

附加信息:最初,脚本有一个不兼容的字符集(不知道为什么)。我使用Dreamweaver的modify>page属性将它改为utf-8,脚本工作(使用元数据)。后来,它破坏了元数据(不记得什么时候),但我认为这是一个错误的空间。现在我找不到问题所在。上述代码本身(复制粘贴到记事本、保存为abc.user.js并拖动到chrome)时,会丢失其元数据。


毫无疑问,一个utf-8bom隐藏在文档的前面。前几天那个问题让我很不舒服。

(为什么utf-8bom甚至存在当然是一个好问题,但是为什么编辑们甚至使用它们确实令人困惑。)


在编码设置为"unicode(utf-8)"的情况下保存脚本(至少在使用bbedit的Mac上)会触发操作问题。

将脚本保存为"western(iso拉丁语1)"可以修复它。

(为了完整起见:Google Chrome 19.0.1084.56,尽管我认为这不相关。)


修理它。可能是编码变化的产物——一些隐藏的字符。

我只是将代码复制到一个新文件(以前我一直在复制整个shebang),从一个工作脚本复制头文件,然后修改它们。它起作用了。

更新:经过一点调查,编码的变化已经把第一个字符搞混了。JS没有解析它,所以脚本仍然有效,但是Chrome/GM不喜欢它。

FWIW:

1
2
3
4
5
6
7
8
9
// ==UserScript==
 // @name Flag Offtopic button
 // @version 1.0
 // @author Manish Goregaokar (http://stackapps.com/users/10098/manishearth)
 // @description Adds a self-navigating"Flag-offtopic" button to MSO
 // @license GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)
 // @include http://meta.stackexchange.com/questions/*

 // ==/UserScript==