小心GreaseMonkey里的window
这是写Twitter RT脚本的时候发现的。
之前采用了这样一种性能优化方式:
(function(window){ var Array = window.Array; })(window);
然后在Firefox中却提示Array is undefined,很莫名。用console.log把window打印出来才发现里面所有大写开头的变量全部不存在。不知道是怎么回事。想起来Twitter的页面代码全部是用this.Array来代替window.Array的,估计也是避免类似的情况。
只好放弃了这种优化来保证Firefox兼容性。
Update: 浪费了早上宝贵的一个多小时,逐行排查,终于发现真正的原因。
用了GM_addStyle后,好像运行环境变了,于是Array和Math就都从window对象里消失了。
给GreaseMonkey提了个issue,也不知道会不会修好。
Update2: 这个问题应该不会修正,根据MDN对Global对象的描述,并没有提到可以通过window对象访问,而是要在全局作用域的时候访问this才行。
The global object itself can be accessed by this in the global scope.
把测试脚本改了一下,果然是正常的。熟读文档才是王道。