gpt4 book ai didi

c# - IE 中的 .NET ActiveX 组件 - 如何获取浏览器引用

转载 作者:太空狗 更新时间:2023-10-29 21:48:18 24 4
gpt4 key购买 nike

我承认我对 COM 和 IE 体系结构了解得足够多,只是为了危险。我有一个与此类似的工作 C# .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

并且可以在 javascript 中成功实例化它:

var CTIAX = new ActiveXObject("CTI.CTIActiveX");
alert(CTIAX.GetMsg());

如何在 CTIActiveX 中获取对客户端站点(浏览器窗口)的引用?我通过实现 IObjectWithSite 在 BHO 中完成了此操作,但我认为这不是 ActiveX 控件的正确方法。如果我在 CTIActiveX 上实现任何接口(interface)(我指的是 IObjectWithSite 之类的 COM 接口(interface)),当我尝试在 Javascript 中实例化时,我会收到一个错误,指出该对象不支持自动化。

最佳答案

首先,您的界面需要 ComVisible(true) 才能被调用脚本看到(这可能会导致错误)。

其次,将项目中的 .NET 引用添加到“Microsoft.mshtml”。这将为各种 IE 相关的东西(窗口、HTML 文档等)导入 COM 接口(interface)

然后,您需要将 IHtmlDocument2 类型的属性添加到您的界面:

IHtmlDocument2 Document { set; }

...在您的类(class)中实现它:

public IHtmlDocument2 Document
{
set { _doc = value;}
}

...从脚本中调用它

CTIAX.Document = document; 

...一旦您存储了对文档的引用,您就可以随意使用它来访问您希望的窗口、其他框架或 HTML DOM 的任何部分。

关于c# - IE 中的 .NET ActiveX 组件 - 如何获取浏览器引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com