用Greasemonkey寫了一個User Script,可以用在twitter上,而twitter有一個ReplyTo的功能,我想從User Script直接去呼叫它,但結果是發生錯誤,錯誤訊息說我呼叫的不是一個function。
雖然要做的功能,繞一下路,自己重刻也可以辦得到,只是不了解其中的道理是什麼?
稍微查了一下Greasemonkey的文件,它說為了怕不同的user script彼此互相干擾,因此它的做法是將我們寫的script包在一個匿名的function中去執行,一旦執行後就不存在了。
不過JavaScript的執行變數或函式的方式,在找不到的時候,不是為一直往上找,一直找到Globe為止嗎?如果是這樣,為什麼還會說not defined呢?
筆誤,Globe -> Global
於 2008-09-18 00:23:04 補充
最佳解答(發問者自選)
我試過上面的程式,一些global的function可以看到,但是內容是undefined。
這是在ff3執行的結果。看來沒解。
8人
GreaseMonkey好像是在一個受限的環境下跑?或是跟網頁其實不是在同一個環境裡面,但是透過document還是能存取網頁上的元件。
用一小段程式在greasemonkey中偵測window物件的屬性,看起來跟直接在網頁中執行這一段程式有所不同:
(function(){
var str = "";
for (var i in window) {
str += i + " : " + window[i] + "\n";
}
alert(str);
})();
我試過上面的程式,一些global的function可以看到,但是內容是undefined。
這是在ff3執行的結果。看來沒解。
2008-09-18 12:47:48補充另外,即使用addEventListener把一些程式attach到網頁中,這些程式還是呼叫不到網頁javascript context裡面的東西。我想這樣設計是為了安全考量,所以greasemonkey裡面的javascript是在他自己的context中執行的,可以使用document存取網頁元件、使用greasemonkey提供的一些global functions。但是javascript是在獨立的context中執行。
同樣地,從網頁上,也無法看到greasemonkey加到網頁元素事件的程式,但是可以執行。
同樣地,從網頁上,也無法看到greasemonkey加到網頁元素事件的程式,但是可以執行。
2008-09-18 12:47:49補充另外,即使用addEventListener把一些程式attach到網頁中,這些程式還是呼叫不到網頁javascript context裡面的東西。我想這樣設計是為了安全考量,所以greasemonkey裡面的javascript是在他自己的context中執行的,可以使用document存取網頁元件、使用greasemonkey提供的一些global functions。但是javascript是在獨立的context中執行。
同樣地,從網頁上,也無法看到greasemonkey加到網頁元素事件的程式,但是可以執行。
同樣地,從網頁上,也無法看到greasemonkey加到網頁元素事件的程式,但是可以執行。
2008-09-18 13:16:24補充嗯嗯,在手冊上看到一些例子,似乎跟這個情況不一致(呼叫blogline定義的script)。不知道是不是到ff3改的。
2008-09-18 13:44:00補充在這裡看到一些資訊:
http://www.oreillynet.com/pub/a/network/2005/11/01/avoid-common-greasemonkey-pitfalls.html?page=5
所以你要透過unsafewindow.replyTo()來呼叫。
http://www.oreillynet.com/pub/a/network/2005/11/01/avoid-common-greasemonkey-pitfalls.html?page=5
所以你要透過unsafewindow.replyTo()來呼叫。
▼ ADVERTISEMENT ▼
-
‧
-
‧
-
‧
相關問答
- 看jQuery作者John Resig談進階JavaScript
- 有趣的V8 Javascript Engine
- 什麼是JavaScript Hijacking?
- Mozilla釋出TraceMonkey加速JavaScript
- 寫物件導向風格的JavaScript
- 下載電子書Adobe AIR for JavaScript Developers Pocketguide
- JavaScript如何在不同網站之間傳遞資料
- JavaScript函setTimeout的scope
- JavaScript中的closure好難懂,它和匿名函式有什麼不同?
- Javascript編碼小工具
- 把瀏覽器的JavaScript和ActiveX的執行全部停用,是否就能真正杜絕網頁威脅?
- 《JavaScript: 優良部份》出版了......
- 用JavaScript處理RSS的好幫手-Google AJAX Feed API
- 我需要找人修改技术指标公式,有精通JavaScript的编程员吗?
- 利用Firebug的console功能作JavaScript偵錯
- MSDN台中研討會
- Google提供幾個Ajax Libraries的Hosting服務
- ::進入Flex的異想世界(6):: ActionScript登場(II)
- Javascript正規表達式與取代功能
- 討論區文章被取代成JavaScript語法!!









