2013-03-07 8 views
5

मैं HTMLGreasemonkey

<script language="javascript" src="javscript.js"></script> 
के सिर में एक जावास्क्रिप्ट फ़ाइल के साथ किसी वेबसाइट पर जाते के साथ एक जावास्क्रिप्ट समारोह निकालें

कोड इस फाइल के अंदर है:

// 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 का उपयोग नहीं किया है, लेकिन ऐसा लगता है। –

+1

क्या यह फ़ायरफ़ॉक्स 2 पर है, पुराने Greasemonkey के साथ, आपके पिछले प्रश्नों की तरह? –

+0

मैंने कोड और अतिरिक्त अलर्ट ('टेस्ट') की कोशिश की; कोड सिर में बनाया जाएगा, लेकिन यह "टेस्ट" – bernte

उत्तर

8

यह स्पष्ट नहीं है कि update एक वैश्विक कार्य है। यदि ऐसा नहीं है तो वह दृष्टिकोण काम नहीं करेगा।

लेकिन आप के साथ कुंजी दबाने हैंडलर ओवरराइड कर सकते हैं:

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



एक सामान्य, अधिक-शक्तिशाली तरीका चुनिंदा ब्लॉक करने के लिए के लिए, या बदलने के लिए, किसी भी जे एस (फ़ायरफ़ॉक्स पर), इसलिए जैसे @run-at document-start का उपयोग करें और the 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

मैं तुमसे प्यार करता हूँ ब्रैक एडम्स: डी unsafeWindow.document.onkeypress = फ़ंक्शन() {}; सही काम करता है: डी ने इस हिस्से को पुरानी लिपि में शामिल किया और सही काम करता है! मुझे उम्मीद है कि यह हिस्सा निश्चित रूप से समाप्त हो गया है: डी मैं इस अगले सप्ताह टर्मिनल पर परीक्षण करूंगा और आपको बता दूंगा। हम इस भाग को खत्म कर सकते हैं और एक बियर पी सकते हैं .. या दो: डी धन्यवाद – bernte

+0

चेकफॉरबैड जावास्क्रिप्ट का उपयोग नहीं कर सकता क्योंकि टर्मिनल में इंटरनेट कनेक्शन नहीं है! – bernte

+1

आपका स्वागत है! याद रखें, स्टैक ओवरफ़्लो प्रश्न आप जिस भी परियोजना पर काम कर रहे हैं उसके "भाग" के बारे में नहीं हैं। वे एक एकल, विशिष्ट, प्रोग्रामिंग समस्या के बारे में हैं। –

संबंधित मुद्दे