2010-10-31 45 views
7

我一直在閱讀了很多,一直在試圖讓現在約5小時完成這件事......所以這裏是Greasemonkey的,壓倒一切的網站功能

我想編寫一個腳本,將覆蓋功能dummy(){$ .ajax(...)}; 在網站上。

這裏是如何我試圖做到這一點

unsafeWindow.dummy = function(data){differantFunction(); $.ajax(...);}; 

function differantFunction(){ 
... 
} 

但會被徵召做一些原來頁面上的虛擬函數...現在只是什麼都不做。

//更新

我試圖運行該功能我試圖覆蓋線槽ADRES吧,看看有什麼是錯的:(JavaScript的:假(「」);)

和我錯誤告訴我$是不確定的,但我在網站上jQuery和在userscript ...我很迷失,現在

+1

它不應該是'unsafeWindow .dummy = function(data){...}'? – 2010-10-31 17:07:10

+0

是應該這只是一個錯字那裏我會現在編輯 – Mars 2010-10-31 20:15:38

回答

11

這是因爲腳本是在GM範圍運行。
如果你不使用任何通用的功能(如GM_setValueGM_xmlhttpRequest),我建議你做到以下幾點:

var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.innerHTML = (<><![CDATA[ 

// YOUR CODE GOES HERE 

]]></>).toString(); 
document.getElementsByTagName('head')[0].appendChild(script); 

編寫代碼作爲一個正常的腳本,而不是一個通用腳本。
我的意思是,刪除所有unsafeWindow參考和相關的東西。
這將使腳本在正確的範圍內運行。

但如果你使用通用的功能,那麼你就需要在正常範圍內的每一個變量之前添加unsafeWindow(如$)或做類似下面的祈禱,使其工作:

$ = unsafeWindow.$; 
//... 

PS 。:Multiline string with E4X不再支持。其他一些選項有:
1)添加你的代碼的功能,然後用 Function.prototype.toString
2)創建你的代碼作爲一個單獨的文件,然後add it as a resource
3)add a backslash at the end of each line

+1

感謝信息這爲我做:) – Mars 2010-11-02 14:48:41

+0

我發現在Firebug控制檯中的錯誤,你不能在Greasemonkey的覆蓋的方法設置斷點:/ – baptx 2012-06-22 10:58:16

+0

我似乎無法得到這個工作 - 可能是因爲我試圖重寫一個事件處理程序? – 2013-06-18 14:20:13