मैं मानता हूं कि मैं केवल COM और IE आर्किटेक्चर के बारे में पर्याप्त खतरनाक होने के बारे में जानता हूं। मैं एक काम कर रहे सी # नेट ActiveX नियंत्रण इस के समान है:आईई में .NET ActiveX घटक - ब्राउज़र संदर्भ कैसे प्राप्त करें
using System;
using System.Runtime.InteropServices;
using BrowseUI;
using mshtml;
using SHDocVw;
using Microsoft.Win32;
namespace CTI
{
public interface CTIActiveXInterface
{
[DispId(1)]
string GetMsg();
}
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CTIActiveX : CTIActiveXInterface
{
/*** Where can I get a reference to SHDocVw.WebBrowser? *****/
SHDocVw.WebBrowser browser;
public string GetMsg()
{
return "foo";
}
}
}
मैं पंजीकृत है और एक प्रकार लायब्रेरी बनाई regasm का उपयोग कर:
regasm CTIActiveX.dll /tlb:CTIActiveXNet.dll /codebase
और सफलतापूर्वक जावास्क्रिप्ट में इस दृष्टांत कर सकते हैं:
var CTIAX = new ActiveXObject("CTI.CTIActiveX");
alert(CTIAX.GetMsg());
मैं CTIActiveX के भीतर क्लाइंट साइट (ब्राउज़र विंडो) का संदर्भ कैसे प्राप्त कर सकता हूं? मैंने इसे IObjectWithSite लागू करके बीएचओ में किया है, लेकिन मुझे नहीं लगता कि यह ActiveX नियंत्रण के लिए सही दृष्टिकोण है। यदि मैं जावास्क्रिप्ट में तत्काल प्रयास करने का प्रयास करता हूं तो मैं किसी भी इंटरफ़ेस को लागू करता हूं (मेरा मतलब है IObjectWithSite जैसे COM इंटरफ़ेस) जब मैं जावास्क्रिप्ट में तुरंत चालू करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है कि ऑब्जेक्ट स्वचालन का समर्थन नहीं करता है।
अच्छा
यह जो एक ही getProperty और PutProperty कि SHDocVw.WebBrowser करता है को उजागर करता है SHDocVw.InternetExplorer के लिए एक संदर्भ, हो जाता है जवाब जो मुझे किसी अन्य समस्या से मदद करता है; हालांकि यह जो मैं खोज रहा हूं वह असाधारण नहीं है। IHTMLDocument2.parentWindow एक mshtml देता है। IHTMLWindow2, SHDocVw.WebBrowser नहीं। मैं SHDocVw.WebBrowser की तलाश में हूं इसलिए मैं बीएचओ के साथ संवाद करने के लिए GetProperty और PutProperty विधियों तक पहुंच सकता हूं। –
इसके अलावा, स्पष्ट होने के लिए, प्रश्न में उदाहरण काम करता है। यदि कार्यान्वयन वर्ग मेरे उदाहरण में कॉमविज़िबल निर्दिष्ट करता है तो कॉमविज़िबल (सत्य) की आवश्यकता नहीं होती है। यह केवल तब टूट जाता है जब मैं स्पष्ट रूप से COM इंटरफ़ेस को कार्यान्वित करता हूं जैसे IObjectWithSite। –