5

addEventListener के लिए एमएसडीएन दस्तावेज कहता है कि यह IDispatch * ऑब्जेक्ट के रूप में कॉलबैक फ़ंक्शन स्वीकार करता है। सी # से (मैं COM इंटरऑप का उपयोग कर रहा हूं), विजुअल स्टूडियो पैरामीटर प्रकार को केवल object के रूप में प्रदर्शित करता है।आईई 9 में एमएसएचटीएम के एडवेन्ट लिस्टनर का उपयोग करके मैं एक ईवेंट श्रोता कैसे जोड़ूं?

मैंने IEventListener इंटरफ़ेस या कुछ ऐसा ही देखा लेकिन उसे कोई नहीं मिला। मुझे क्या पास करना है?

उत्तर

5

कुछ शोध के बाद, मैंने सीखा कि इन COM कनेक्शन बिंदु (ईवेंट हैंडलर) DispId(0) के साथ निर्दिष्ट हैं। कॉलबैक कार्यों वर्गों के उदाहरण का प्रतिनिधित्व कर रहे पसंद:

// These attributes may be optional, depending on the project configuration. 
[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.AutoDispatch)] 
public class EventListener 
{ 
    [DispId(0)] 
    // The "target" parameter is an implementation detail. 
    public void NameDoesNotMatter(object target, IDOMEvent evt) { ... } 
} 

DispId(0) के बाद से आह्वान करने के लिए डिफ़ॉल्ट विधि निर्दिष्ट करता है, विधि का वास्तविक नाम फर्क नहीं पड़ता। हालांकि, विधि पैरामीटर निश्चित रूप से कोई फर्क नहीं पड़ता। उदाहरण के लिए, IHTMLElement.onclick को कोई तर्क के साथ कॉलबैक असाइन किया जाना चाहिए, जबकि IHTMLElement2.attachEventIHTMLEventObj (या IHTMLEventObj2, ..., 6, या यहां तक ​​कि केवल object) के पैरामीटर के साथ कॉलबैक लेता है।

संक्षेप में, COM IDispatch कॉलबैक को एक COM-Visual क्लास का उपयोग करके सी # में कार्यान्वित किया जा सकता है जो सही तर्क स्वीकार करता है और [DispId(0)] के साथ एनोटेट किया गया है।


इस सब के बावजूद, समाधान है कि W3C डोम घटनाक्रम एपीआई से बचने IE9 डोम वस्तुओं इस विधि जब ब्राउज़र संगतता के लिए एक कम दस्तावेज़ मोड उपयोग कर रहा है का समर्थन नहीं करते के रूप में, और अधिक उपयुक्त हो सकता है। उदाहरण के लिए, addEventListener का उपयोग करने वाला एक एक्सटेंशन Bing जैसे पृष्ठ पर विफल हो जाएगा, जो आईई 7 मोड में प्रस्तुत किया जाता है।

यह भी 1212 डेवलपर टूल के माध्यम से इसे मैन्युअल रूप से करने से अलग IWebBrowser2 उदाहरण द्वारा उपयोग किए गए दस्तावेज़ मोड को सेट करना संभव नहीं लगता है।

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