2013-03-07 18 views
5

我在HTML與Greasemonkey的

<script language="javascript" src="javscript.js"></script> 
的頭訪問一個網站與JavaScript文件中刪除javascript函數

這個文件中的代碼是:

// keypress management 
if (document.layers) document.captureEvents(Event.KEYPRESS) 
function update(e) {   
    if (document.all) {    // Explorer 
     if (event.keyCode==13) document.forms[0].submit(); // 13 = ENTER 
     else if (event.keyCode==26) runHelp(hplk);   // 26 = CTRL+Z 
     return; 
    } else {            // mozilla 
     if (e.which==13) document.forms[0].submit();  // 13 = ENTER 
     else if (e.which==26) runHelp(hplk);    // 122 = CTRL+Z  
     return;   
    } 
} 
document.onkeypress=update; 

我想禁用/刪除/用Greasemonkey替換這個函數。

我嘗試了與

unsafeWindow.update = function(){} 

沒有結果! (在控制檯沒有錯誤)

有沒有辦法殺死這個功能?

+0

看看答案爲[這個問題](http://stackoverflow.com/questions/4064035/greasemonkey-overriding-website-functions)爲你的作品。有一段時間沒有使用GreaseMonkey,但它似乎有道理。 – 2013-03-07 22:13:18

+1

這是Firefox 2上的舊版Greasemonkey嗎?就像您以前的問題一樣? – 2013-03-07 22:38:00

+0

我嘗試了代碼並添加了警報('TEST');代碼將在頭部創建,但它不會觸發「測試」 – bernte 2013-03-07 22:42:19

回答

8

目前尚不清楚update是一個全局函數。如果不是,那麼這種方法將無法工作。

但是你可以重寫按鍵處理:

unsafeWindow.document.onkeypress = function(){}; 



對於一般的,高功率的方式來選擇性阻斷,或更換任何JS(在Firefox)使用@run-at document-startthe checkForBadJavascripts function,如下所示:

// ==UserScript== 
// @name  _Replace select javascript on a page 
// @include  http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require  https://gist.github.com/raw/2620135/checkForBadJavascripts.js 
// @run-at  document-start 
// @grant  GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

checkForBadJavascripts ([ 
    [ false, 
     /document\.onkeypress\s*=\s*update/, 
     function() { 
      addJS_Node (myKeypressFunction.toString()); 
      addJS_Node ('document.onkeypress = myKeypressFunction;'); 
     } 
    ] 
]); 


function myKeypressFunction (evt) { 
    /* DO WHATEVER HERE BUT USE NO GREASEMONKEY FUNCTIONS INSIDE 
     THIS FUNCTION. 
    */ 
    console.log ("Keypress function fired."); 
} 

See this answer, for more information on checkForBadJavascripts.

+0

我愛你BROCK ADAMS:D unsafeWindow.document.onkeypress = function(){};完美的作品:D將這部分包含到舊腳本中,並且完美無缺!我希望這部分是完全完成的:D我將在終端上測試這個星期,並讓你知道。比我們可以完成這部分,喝一杯啤酒..或兩個:D謝謝 – bernte 2013-03-07 23:42:24

+0

不能使用checkForBadJavascripts,因爲終端沒有互聯網連接! – bernte 2013-03-07 23:45:44

+1

不客氣!請記住,堆棧溢出問題不是關於您正在處理的任何項目的「部分」。它們涉及單個的,具體的編程問題。 – 2013-03-07 23:46:25