कुछ शोध के बाद, मैंने सीखा कि इन 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.attachEvent
IHTMLEventObj
(या IHTMLEventObj2
, ..., 6
, या यहां तक कि केवल object
) के पैरामीटर के साथ कॉलबैक लेता है।
संक्षेप में, COM IDispatch
कॉलबैक को एक COM-Visual क्लास का उपयोग करके सी # में कार्यान्वित किया जा सकता है जो सही तर्क स्वीकार करता है और [DispId(0)]
के साथ एनोटेट किया गया है।
इस सब के बावजूद, समाधान है कि W3C डोम घटनाक्रम एपीआई से बचने IE9 डोम वस्तुओं इस विधि जब ब्राउज़र संगतता के लिए एक कम दस्तावेज़ मोड उपयोग कर रहा है का समर्थन नहीं करते के रूप में, और अधिक उपयुक्त हो सकता है। उदाहरण के लिए, addEventListener
का उपयोग करने वाला एक एक्सटेंशन Bing जैसे पृष्ठ पर विफल हो जाएगा, जो आईई 7 मोड में प्रस्तुत किया जाता है।
यह भी 1212 डेवलपर टूल के माध्यम से इसे मैन्युअल रूप से करने से अलग IWebBrowser2
उदाहरण द्वारा उपयोग किए गए दस्तावेज़ मोड को सेट करना संभव नहीं लगता है।