我今天刚开始使用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
”(这不起作用..)
答案 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} }。