2009-07-04 19 views
6

मेरे पास एक .NET WebBrowser नियंत्रण है जिसका उपयोग मैं कुछ जावास्क्रिप्ट-भारी पृष्ठों को प्रदर्शित करने के लिए कर रहा हूं। पेज यूयूआई का उपयोग करते हैं और पोर्टेबल होने के तरीके में बनाए गए हैं।.NET WebBrowser नियंत्रण में जावास्क्रिप्ट कीप/कीडाउन

मुझे अभी पता चला है कि जब मैं जावास्क्रिप्ट में कीप्रेस को कैप्चर कर सकता हूं, तो मैं जावास्क्रिप्ट में कीप या कीडाउन कैप्चर नहीं कर सकता। यह मुझे ईएससी, CTRL + ए, यूपी, दाएं, टैब, उदाहरण के लिए हुकिंग से रोकता है।

मैं समझता हूं कि मैं .NET में चाबियाँ कैप्चर कर सकता हूं, और इनमें से कुछ के लिए 'हैक' हैं। उदाहरण के लिए, CTRL + A के लिए Document.ExecCommand ("SelectAll", .., ..)। --- वैसे, मैं अभी भी SendKeys.Send ("{TAB}") टैब के लिए काम करने के लिए नहीं मिल सकता --- ---। मुझे एहसास है कि मैं यूपी तीर को संसाधित करने वाले फ़ंक्शन को निष्पादित करने के लिए .NET का उपयोग कर सकता हूं, लेकिन पोर्टेबिलिटी और सर्वोत्तम अभ्यास कारणों से, मैं वास्तव में ऐसा नहीं करना चाहता हूं।

क्या कोई बता सकता है कि मैं जावास्क्रिप्ट में कीप/कीडाउन घटनाओं पर कब्जा करने में असमर्थ क्यों हूं या एक समाधान का सुझाव देता हूं?

धन्यवाद!

उत्तर

0

मैंने आपको जावास्क्रिप्ट में तीर कुंजी प्रेस को कैप्चर करने के तरीके के बारे में दिखाने के लिए थोड़ा सा कोड लिखा है। मैं IE और Firefox में इस परीक्षण किया है, तो यह ठीक होना चाहिए ...

<input id="Text1" type="text" onkeydown="keyPress(event)" /> 

<script type="text/javascript"> 
    function keyPress(e) 
    { 
     var textBox = document.getElementById('Text1'); 

     var keynum; 

     if (window.event) // IE 
      keynum = e.keyCode; 
     if (e.which) // Other browser 
      keynum = e.which; 

     switch (keynum) 
     { 
      case 38: 
       textBox.value = 'Up Arrow'; 
       break; 
      case 37: 
       textBox.value = 'Left Arrow'; 
       break; 
      case 40: 
       textBox.value = 'Down Arrow'; 
       break; 
      case 39: 
       textBox.value = 'Right Arrrow'; 
       break; 
      default: 
       textBox.value = 'Another key'; 
       break; 
     } 
    } 
</script> 

आशा है कि यह मदद करता है :)

1

मैं yui से इस उदाहरण (ज ttp लोड करने का प्रयास: //developer.yahoo। कॉम/यूई/उदाहरण/कंटेनर/keylistener_clean.html) एक WinForm एप्लिकेशन में जिसमें मैंने वेबब्रोसर नियंत्रण छोड़ा और सब कुछ ठीक काम करता है। उदाहरण कुंजीपटल ईवेंट का उपयोग करता है, इसलिए मुझे लगता है कि यह आपके मामले को फिट करता है।

आप अपने आप ATL वेब ब्राउज़र नियंत्रण (CAxHost) के साथ जांच करने के लिए है, जिसमें मोड आप WebBrowser नियंत्रण http://blogs.msdn.com/ie/archive/2008/03/18/webbrowser-control-rendering-modes-in-ie8.aspx

मार्को

2

चल रहा है बस इस समस्या में पड़ गए चाह सकते हैं। यह सुनिश्चित नहीं है कि Winforms में ऐसा कैसे करें, लेकिन आपको जो करना है, वह IOleInPlaceActiveObject के लिए क्वेरी ऑब्जेक्ट को ब्राउज़र ऑब्जेक्ट से बाहर करें और फिर IOleInPlaceActiveObject :: TranslateAccelerator को अपने संदेश लूप में अनुवाद संदेश कॉल करने से पहले कॉल करें। मुझे लगता है कि Winforms में इसका अर्थ है IOleInPlaceActiveObject (आप शायद पिनवोक.net से इंटरफेस की परिभाषा पा सकते हैं)

यह वास्तव में नियंत्रण को अपने त्वरक करने के लिए होना चाहिए (जैसे प्रिंट के लिए ctrl-p , रीफ्रेश आदि के लिए F5), लेकिन ऐसा लगता है कि इस कॉल से कीडडाउन ईवेंट भी महत्वपूर्ण है। यदि आप इनमें से कुछ त्वरक को अवरुद्ध करना चाहते हैं, तो मुझे लगता है कि आप ब्राउज़र के एक्स होस्ट में IDocHostUIHandler :: अनुवाद एक्सेलेरेटर को कार्यान्वित करके ऐसा कर सकते हैं और इसे चालू करने के लिए ओले कमांड का परीक्षण किया जा रहा है।

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