用Greasemonkey寫了一個User Script,可以用在twitter上,而twitter有一個ReplyTo的功能,我想從User Script直接去呼叫它,但結果是發生錯誤,錯誤訊息說我呼叫的不是一個function。
雖然要做的功能,繞一下路,自己重刻也可以辦得到,只是不了解其中的道理是什麼?
稍微查了一下Greasemonkey的文件,它說為了怕不同的user script彼此互相干擾,因此它的做法是將我們寫的script包在一個匿名的function中去執行,一旦執行後就不存在了。
不過JavaScript的執行變數或函式的方式,在找不到的時候,不是為一直往上找,一直找到Globe為止嗎?如果是這樣,為什麼還會說not defined呢?
GreaseMonkey好像是在一個受限的環境下跑?或是跟網頁其實不是在同一個環境裡面,但是透過document還是能存取網頁上的元件。
用一小段程式在greasemonkey中偵測window物件的屬性,看起來跟直接在網頁中執行這一段程式有所不同:
<pre class="c" name="code">
(function(){
var str = "";
for (var i in window) {
str += i + " : " + window[i] + "\n";
}
alert(str);
})();
我試過上面的程式,一些global的function可以看到,但是內容是undefined。
這是在ff3執行的結果。看來沒解。