IHTMLScriptElement在哪里?

时间:2011-03-07 05:31:07

标签: c# .net

我今天刚开始使用Visual Studio 2010 C#IDE。

我正在尝试向WebBrowser组件注入javascript并遵循stackoverflow的答案:

How to inject Javascript in WebBrowser control?

HtmlElement txtBox = webBrowser1.Document.GetElementById("UserEmailShortcut");
//js
HtmlElement scriptOne = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptOne.DomElement;
element.text = "function sayHello() { alert('hello') }";
txtBox.AppendChild(scriptOne);
webBrowser1.Document.InvokeScript("sayHello");

现在 IHTMLScriptElement 下面有红色波浪线说:

 Error  1   The type or namespace name 'IHTMLScriptElement' 
could not be found (are you missing a using directive or an assembly reference?)
    C:\Users\m-tak\documents\visual studio
 2010\Projects\winformWithWebBrowserTest\winformWithWebBrowserTest\Form1.cs
    25  13  winformWithWebBrowserTest

我看过文档 http://msdn.microsoft.com/en-us/library/aa768904(v=VS.85).aspx

但我无法理解为什么。这不是已经包含的,只需要包括像“using IHTMLScriptElement”(这不起作用..)

4 个答案:

答案 0 :(得分:37)

Project + Add Reference,选择Microsoft.mshtml。如果它没有出现在列表中(它是PIA),那么使用Browse选项卡并选择c:\ windows \ system32 \ mshtml.tlb

在源代码文件的顶部添加using指令:

using mshtml;

请注意您有部署详细信息。如果PIA没有安装在目标机器上,这是不可能的,那么最好的办法是将程序集引用的Copy Local属性设置为True。这将在生成文件夹中创建Microsoft.mshtml.dll文件。将它与EXE一起复制到目标计算机上。在某些情况下需要PIA,而不是这个。


更新到这篇旧帖子,.NET 4+和VS2010 +现在支持“嵌入互操作类型”引用程序集属性。也称为“无PIA”功能。这淘汰了对PIA的需求,是处理互操作程序集的最佳方式。它会自动设置为True,除非您的项目是在旧版本的VS上启动的。

它没有下端,您不再需要部署互操作程序集,并且您使用的互操作类型现在已嵌入到您的可执行文件中。只是你使用的那些。您的代码可能需要进行一些小的更改,如果您现在使用new XxxxClass()创建COM对象,则需要删除名称的“类”部分。

答案 1 :(得分:2)

IHTMLScriptElement在Mshtml中定义。您需要添加对Microsoft HTML对象库的引用,然后为VS添加“使用mshtml”来解析IHTMLScriptElement。

答案 2 :(得分:2)

我建议使用answer这个仅限托管的解决方案,用于注入不需要像mshtml一样部署PIA的JavaScript。

答案 3 :(得分:1)

它在Mshtml.dll中。

System.Windows.Forms.HtmlElement的{​​{1}}属性是object类型,但实际上是元素的COM IUnknown指针,您可以将其转换为其中一个HTML元素接口,例如{{1} }。