iT邦幫忙

0

在Firefox使用user script,有辦法呼叫瀏覽中的網站的function嗎?

用Greasemonkey寫了一個User Script,可以用在twitter上,而twitter有一個ReplyTo的功能,我想從User Script直接去呼叫它,但結果是發生錯誤,錯誤訊息說我呼叫的不是一個function。

雖然要做的功能,繞一下路,自己重刻也可以辦得到,只是不了解其中的道理是什麼?

稍微查了一下Greasemonkey的文件,它說為了怕不同的user script彼此互相干擾,因此它的做法是將我們寫的script包在一個匿名的function中去執行,一旦執行後就不存在了。

不過JavaScript的執行變數或函式的方式,在找不到的時候,不是為一直往上找,一直找到Globe為止嗎?如果是這樣,為什麼還會說not defined呢?

doz iT邦好手 8 級 ‧ 2008-09-27 13:07:47 檢舉
真好奇wordsmith大要寫什麼好玩的

1 個回答

18
fillano
iT邦超人 1 級 ‧ 2008-09-18 12:04:23
最佳解答

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執行的結果。看來沒解。

wordsmith iT邦高手 1 級 ‧ 2008-09-18 16:29:49 檢舉

果然可以用unsafewindow.replyTo()來呼叫,真是太好了。

感謝fillano大大。

我要發表回答

立即登入回答