2009-09-09 2 views
8

मैं Ctrl पर कब्जा करना चाहते हैं - आर या F5 ब्राउज़र यह एक ब्राउज़र ताज़ा प्रदर्शन रोकने के लिए, लेकिन इसके बजाय कस्टम ताज़ा प्रदर्शन करने पर शॉर्टकट।जावास्क्रिप्ट का उपयोग कर आईई पर Ctrl-R या F5 को कैप्चर/ओवरराइड करने का कोई तरीका है?

document.onkeypress = function(e){ 
     if ((e.ctrlKey || e.metaKey) && e.keyCode == 114) // Ctrl-R 
    e.preventDefault(); 
} 

लेकिन उस IE पर काम नहीं करता है: का उपयोग कर सफारी और एफएफ पर आर -

मैं कब्जा करने के लिए Ctrl में सक्षम था। क्या आईई पर ऐसा करने का कोई तरीका है?

अद्यतन: उन लोगों के लिए जो पूछ रहे हैं कि मैं इसे पहली जगह क्यों कर रहा हूं: मैं बस एक कस्टम ऐप रीफ्रेश करना चाहता था, लेकिन "रीफ्रेश" बटन से बचना चाहता था क्योंकि मैं रीफ्रेश का उपयोग करके हतोत्साहित करता हूं (हमारे पास एक पूर्ण पृष्ठ फ्लेक्स ऐप है)। हमने एफ 8 पर स्विचिंग समाप्त कर दी क्योंकि एफ 5 सभी ब्राउज़रों पर काम करना बहुत मुश्किल था।

+0

तुम सिर्फ एक रूप reposting को रोकने के लिए करना चाहते हैं? –

+0

क्या ऐसा करने के लिए कोई अच्छा कारण है? मैं शायद एक ऐसी साइट से बहुत नाराज हो जाऊंगा जो उस तरह की मूल ब्राउज़र कार्यक्षमता को ओवरराइड करता है। – Spudley

+4

ऐसा करने के बहुत अच्छे कारण हैं। डेस्कटॉप-आधारित टाइम शीट डेटा एंट्री सिस्टम पर विचार करें जहां सैकड़ों उपयोगकर्ताओं को कुछ गर्म कुंजी का उपयोग करने के लिए प्रशिक्षित किया गया है। आप एप्लिकेशन को एक वेब-आधारित एप्लिकेशन में माइग्रेट करना चाहते हैं जिसमें डेस्कटॉप एप्लिकेशन के लिए बाधाएं हैं। सही या गलत के लिए, यदि वह प्रबंधन का अंतिम निर्णय है, तो फ़ंक्शन कुंजियों के लिए डिफ़ॉल्ट व्यवहार को ओवरराइड करने का एक तरीका ढूंढना अनिवार्य है। ऐसे कई अन्य परिदृश्य हैं जहां आप डिफ़ॉल्ट कीबोर्ड व्यवहार को ओवरराइड करना चाहते हैं, उनमें से अधिकतर मैं आंतरिक वेब अनुप्रयोगों के लिए कल्पना करना चाहता हूं। –

उत्तर

8

ओपन जावास्क्रिप्ट

http://www.openjs.com/scripts/events/keyboard_shortcuts/

कुछ कुंजी के लिए (एफ 1, F4), तो आपको पता बार के बिना एक नई ब्राउज़र विंडो खोलने के लिए किया है।

उदाहरण

खुला एक नई विंडो, श्रंगार के बिना:

 
window.open('webpage.html', 'TLA', 
'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=665'); 

JavaScript लाइब्रेरी का उपयोग करें:

var FALSE_FUNCTION = new Function("return false"); 

/** 
* Called to disable F1, F3, and F5. 
*/ 
function disableShortcuts() { 
    // Disable online help (the F1 key). 
    // 
    document.onhelp = FALSE_FUNCTION; 
    window.onhelp = FALSE_FUNCTION; 

    // Disable the F1, F3 and F5 keys. Without this, browsers that have these 
    // function keys assigned to a specific behaviour (i.e., opening a search 
    // tab, or refreshing the page) will continue to execute that behaviour. 
    // 
    document.onkeydown = function disableKeys() { 
    // Disable F1, F3 and F5 (112, 114 and 116, respectively). 
    // 
    if(typeof event != 'undefined') { 
     if((event.keyCode == 112) || 
      (event.keyCode == 114) || 
      (event.keyCode == 116)) { 
     event.keyCode = 0; 
     return false; 
     } 
    } 
    }; 

    // For good measure, assign F1, F3, and F5 to functions that do nothing. 
    // 
    shortcut.add("f1", FALSE_FUNCTION); 
    shortcut.add("f3", FALSE_FUNCTION); 
    shortcut.add("f5", FALSE_FUNCTION); 
} 

अंदर webpage.html:

<body onload="disableShortcuts();"> 
+0

मैंने यह कोशिश की और यह मेरे लिए आईई 8, क्रोम, सफारी, ओपेरा और एफएफ पर काम किया - एफ 5 कुंजी के लिए। – airportyh

+1

बेहतर: 'var FALSE_FUNCTION = function() {वापसी झूठी; }; '। – Tomas

+0

महान उत्तर, मुझे बहुत समय बचाया। "खराब डिजाइन की तरह गंध" के लिए +1 –

1

YUI एक प्रमुख हैंडलर कि सभी ब्राउज़रों

http://developer.yahoo.com/yui/examples/container/keylistener.html

मुझे लगता है कि इसके बाद के संस्करण कोड के साथ समस्या यह है कि आईई कार्य करने के लिए घटना पास नहीं है भर में कार्य करेंगे। यह इसे वैश्विक वैरिएबल में रखता है जिसे window.event कहा जाता है।

मैं यूयूआई कुंजी श्रोता की कोशिश करने का सुझाव देता हूं, यह एक बहुत साफ समाधान होगा और आपको पूरी लाइब्रेरी का उपयोग करने की आवश्यकता नहीं है, केवल आपको आवश्यक टुकड़े।

1

मैं beleave document.body.onbeforeunload रास्ता है। आप उपयोगकर्ता को इसके साथ पेज छोड़ने से भी रोक सकते हैं। बस यह सुनिश्चित करने के बारे में सुनिश्चित नहीं है कि यह रीफ्रेश है या यदि वह वास्तव में कहीं और सर्फिंग कर रहा है (दस्तावेज़। स्थान शायद?)

4

ब्राउज़र में फ़ंक्शन-कुंजी को ओवरराइड करने का कोई ठोस तरीका नहीं है।

इंटरनेट एक्सप्लोरर कुछ कुंजी है कि ओवरराइड नहीं किया जा सकता है, और कुछ चाबियाँ जो है - तब भी जब अधिरोहित - अभी भी डिफ़ॉल्ट व्यवहार निष्पादित करता है - F11 कुंजी है, जो पूर्ण स्क्रीन मोड पर स्विच करता है, और F1 कुंजी की तरह जो एक सहायता खिड़की खुलता है।

क्रोम आपको मुख्य कार्यक्रमों का उपयोग करने की अनुमति नहीं देता है।

फ़ायरफ़ॉक्स सबसे सौम्य है, लेकिन अभी भी स्केची - इंटरनेट एक्सप्लोरर की तरह; अभी भी कुछ कुंजियां और डिफ़ॉल्ट व्यवहार हैं जिन्हें आप ओवरराइड नहीं कर सकते हैं।

और अंत में .. ओपेरा .. जो इंटरनेट एक्सप्लोरर जितना मुश्किल है।

और डिफ़ॉल्ट व्यवहार संस्करण से संस्करण से अलग है। यह एक खदान क्षेत्र में चलने की तरह है .. आंखों पर पट्टी .. :)

ओवरराइड करने के लिए CTRL + आर/F5 बुरा डिजाइन की तरह बदबू आ रही है की कोशिश कर रहा।

आप किस समस्या को हल करने की कोशिश कर रहे हैं?

+2

+1। –

+0

@ डेव जार्विस: क्या आप वाकई यह इंटरनेट एक्सप्लोरर 8 में काम करते हैं? मुझे बस इतना भाग्य नहीं मिला है। – roosteronacid

+0

@roosteronacid: IE8 पर, मुझे एक-पंक्ति तय करना पड़ा: "var code;" जोड़ें लाइन के बाद: "var func = function (e) {"। आईई 8 जेएस के साथ कठोर प्रतीत होता है। शॉर्टकट.जेएस में – airportyh

2

चूंकि "कैसे" पहले से ही कवर किया गया है, मैंने सोचा कि मैं उल्लेख करता हूं कि आपको इस तरह के कुछ के लिए जावास्क्रिप्ट का उपयोग करने की सीमाओं से अवगत होना चाहिए।

उदाहरण के लिए, सफारी (और संभवतः अन्य) में, यदि आप ब्राउज़र के पर जाएं इनपुट फ़ील्ड पर जाएं, तो आप अभी भी शॉर्टकट कुंजी आदेश जारी कर सकते हैं, लेकिन यह आपके जावास्क्रिप्ट के दायरे से बाहर है। यदि उपयोगकर्ता ऐसा करता है, तो आपके द्वारा लिखे गए किसी भी महत्वपूर्ण-ईवेंट-खाने कोड को नहीं बुलाया जाएगा, और कीप्रेस ठीक से गुज़र जाएगी।

तो आपके द्वारा प्राप्त किए गए समाधान काम कर सकते हैं, लेकिन बुनियादी ब्राउज़र कार्यों का उपयोग करके लगभग किसी भी तरह से सार्वभौमिक रूप से पराजित हो जाएगा।

0
F11 आईई पर के लिए

शरीर (onkeydown='return checkKey(event)')

function checkKey(e) { 
var alt = e.altKey; 
var key = e.keyCode; 
var type = e.srcElement.type; 
ctrl = event.ctrlKey 

if (alt || ((key == 8)&&(type != "text" && type != "textarea" && type != "password")) || (ctrl&&(key == 82)) || (key == 122)) { 
    event.keyCode = 0; 
    e.keyCode = 0; 
    event.returnValue = false; 
       return false; 
      } 

     return true; 
} 
0

आप keyCode == 82, नहीं 114 की कोशिश की है के लिए onkeydown घटना पर checkkey जोड़ सकता हूँ? Key codes ASCII/charCodes के समान नहीं हैं, इसलिए कोई ऊपरी/निचला मामला विचार नहीं है।

यह मेरे लिए काम किया (ठीक है, तकनीकी रूप से मैं इसे एक JQuery keydown हैंडलर के साथ प्रयोग किया, नहीं document.onkeypress):

document.onkeypress = function(e){ 
    if ((e.ctrlKey || e.metaKey) && e.keyCode == 82) // Ctrl-R 
    e.preventDefault(); 
} 

और यह सब उन रो "बुरा डिजाइन" के लिए - मैं एक टर्मिनल एमुलेटर का निर्माण कर रहा हूँ और इतिहास खोजने के लिए बैट CTRL-R से मिलान करने के लिए CTRL-R चाहते हैं, पृष्ठ को रीफ्रेश न करें। हमेशा मामलों का उपयोग कर रहे हैं।

-1

मैं केवल जावास्क्रिप्ट कोर का उपयोग करके इस तरह की समस्या को हल करने में कामयाब रहा। कोड दो हिस्सों, परिभाषा और कार्यान्वयन में विभाजित है लेकिन यदि आवश्यक हो तो भागों को विलय किया जा सकता है।

परिभाषा

/** 
* addKeyActions takes an array of objects that looks like this: 
* 
* { 
* keyCodes: [120], //F9 
* modifiers: ['ctrlKey', 'shiftKey', 'altKey', 'altGraphKey', 'metaKey'], //Only legal modifiers 
* callback: function(event){}; 
* } 
* 
* A good resource to find the keycodes you are looking for is: 
* http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes 
* 
* However, there are more keycodes than written on this page, so if you can't find what you are looking for, 
* I have provided a function that you can call to display the keycode for the current button pressed - alertKeyCodes 
* 
* 
* @Version 1.01 
*/ 


/* 
* --HOW TO USE-- 
* 
var allModifiersKeys = { 
    keyCodes: [120, 121], //F9, F10 
    modifiers: ['ctrlKey', 'shiftKey', 'altKey'], 
    callback: function(event){alert("All modifiers pressed + Function-button!");} 
}; 

var altKeys = { 
    keyCodes: [122, 123], //F11, F12 
    modifiers: ['altKey'], 
    callback: function(event){alert("ALT pressed + Function-button!");} 
}; 

var shiftCtrlKeys = { 
    keyCodes: [116, 117], //F5, F6 
    modifiers: ['ctrlKey', 'shiftKey'], 
    callback: function(event){alert("CTRL+SHIFT+Function-button pressed!");} 
}; 

var noModifierKeys = { 
    keyCodes: [118, 119], //F7, F8 
    callback: function(event){preventDefaultEventPropagation(); alert("Function-button!");} //Do not forget to also declare the preventDefaultEventPropagation-function 
    //that is listed below for this example to work 
}; 

addKeyActions([allModifiersKeys, altKeys, shiftCtrlKeys, noModifierKeys]); 

*/ 

function addKeyActions(key){ 

    document.onkeydown = function(){ 
     var matchingKeyCode = findMatchingKeyCode(); 
     var match = matchModifiers(matchingKeyCode); 
     if(match){ 
      matchingKeyCode.callback(event); 
     } 
    }; 

    function findMatchingKeyCode(){ 
     var eventKeyCode = event.keyCode || event.which || event.charCode; 
     var returnVal; 
     for(var i=0; i<key.length; i++){ 
      var tempKey = key[i]; 
      var containsKeyCode = isValueInArray(eventKeyCode, tempKey.keyCodes); 
      if(containsKeyCode){ 
       returnVal = tempKey; 
      } 
     } 
     return returnVal; 
    } 

    function isValueInArray(value, array){ 
     var hasValue = false; 
     for(var i=0; i < array.length; i++){ 
      var tempValue = array[i]; 
      if(tempValue === value){ 
       hasValue = true; 
      } 
     } 
     return hasValue; 
    } 

    function matchModifiers(key){ 
     var match = false; 
     if(key != undefined){ 
      match = true; 
      if(key.modifiers instanceof Array){ 
       for(var i=0; i<key.modifiers.length; i++){ 
        var modifier = key.modifiers[i]; 
        match = match && event[modifier]; 
       } 
      } 
     } 
     return match; 
    } 
} 

/** 
* Useful callbacks/functions are listed below 
*/ 
function preventDefaultEventPropagation(){ 

    if(event.cancelBubble) event.cancelBubble = true; 
    if(event.stopPropagation) event.stopPropagation(); 
    if(event.preventDefault) event.preventDefault(); 

    event.returnValue = false; 
    event.keyCode = 0; 
    return false; 
} 

/** 
* Useful methods during developement 
*/ 
function alertKeyCodes(){ 
    document.onkeydown = function(){ 
     alert(event.keyCode || event.which || event.charCode); 
     if(event.cancelBubble) event.cancelBubble = true; 
     if(event.stopPropagation) event.stopPropagation(); 
     if(event.preventDefault) event.preventDefault(); 

     event.returnValue = false; 
     event.keyCode = 0; 
     return false; 
    }; 
} 

कार्यान्वयन

$(document).ready(function() { 
     var SingleKeys = { 
      keyCodes: [114, 116, 121, 122], //F3, F5, F10, F11 
      callback: function(event){return preventDefaultEventPropagation();} 
     }; 

     var BackspaceKeys = { 
      keyCodes: [8], //Backspace 
      callback: function(event){ 
       var sourceOfEvent = event.target || event.srcElement; 
       if(sourceOfEvent.tagName == "BODY"){ 
        return preventDefaultEventPropagation(); 
       } 
      } 
     }; 
     var EnterKeys = { 
       keyCodes: [13], //Enter 
       callback: function(event){ 
        var sourceOfEvent = event.target || event.srcElement; 
        if(sourceOfEvent.tagName == "BODY"){ 
         return preventDefaultEventPropagation(); 
        } 
        if(sourceOfEvent.tagName == "INPUT" && sourceOfEvent.type == "text"){ 
         return preventDefaultEventPropagation(); 
        } 
       } 
     }; 

     var AltKeys = { 
      keyCodes: [36, 37, 39], //Home, Left, Right 
      modifiers: ['altKey'], 
      callback: function(event){return preventDefaultEventPropagation();} 
     }; 

     var CtrlKeys = { 
      keyCodes: [66, 68, 69, 72, 73, 76, 78, 79, 82], //B, D, E, H, I, L, N, O, R 
      modifiers: ['ctrlKey'], 
      callback: function(event){return preventDefaultEventPropagation();} 
     }; 

     addKeyActions([SingleKeys, BackspaceKeys, EnterKeys, AltKeys,CtrlKeys]); 
}); 

बस कीकोड आप रोकना और कॉलबैक संपादित करना चाहते हैं जोड़ने तदनुसार

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

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