IHTMLScriptElement在哪里?

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

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

如何在WebBrowser控件中注入Javascript?

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 ”(它不起作用..)

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

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

 using mshtml; 

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


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

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

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

我建议这个答案只适用于注入javascript的托管解决方案,不需要像mshtml一样部署PIA。

它在Mshtml.dll中。

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