나는 COM 및 IE 아키텍처에 대해서만 충분히 알고 위험하다고 인정합니다.IE의 .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());
나는이 유사한 작업의 C# .NET ActiveX 컨트롤을
CTIActiveX에서 클라이언트 사이트 (브라우저 창)에 대한 참조를 얻으려면 어떻게해야합니까? IObjectWithSite를 구현하여 BHO에서이 작업을 수행했지만이 방법이 ActiveX 컨트롤에 대한 올바른 접근 방식이라고 생각하지 않습니다. Javascript에서 인스턴스를 만들려고 할 때 CTIActiveX에서 어떤 인터페이스 (IObjectWithSite와 같은 COM 인터페이스)를 구현하면 객체가 자동화를 지원하지 않는다는 오류가 발생합니다.
이 같은 GetProperty를하고 PutProperty이 SHDocVw.WebBrowser가하는 노출 SHDocVw.InternetExplorer에 대한 참조를 가져옵니다 다른 문제로 나를 도와주는 답. 그러나 그것은 내가 찾고있는 것이 아닙니다. IHTMLDocument2.parentWindow는 SHDocVw.WebBrowser가 아닌 mshtml.IHTMLWindow2를 반환합니다. BHO와 통신하기 위해 GetProperty 및 PutProperty 메서드를 사용할 수 있도록 SHDocVw.WebBrowser를 찾고 있습니다. –
또한 분명히하기 위해 질문의 예가 효과적입니다. 예제 에서처럼 구현 클래스가 ComVisible을 지정하면 ComVisible (true)이 필요하지 않은 것처럼 보입니다. IObjectWithSite와 같은 COM 인터페이스를 명시 적으로 구현하는 경우에만 중단됩니다. –