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

我正在尝试将javascript注入(inject)WebBrowser组件,并遵循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”(无效)即可。

最佳答案

在项目+添加引用中,选择Microsoft.mshtml。如果它没有出现在列表中(它是PIA),则使用“浏览”选项卡并选择c:\windows\system32\mshtml.tlb

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

using mshtml;

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

更新到此旧文章后,.NET 4+和VS2010 +现在支持“嵌入互操作类型”引用程序集属性。也称为“无PIA”功能。这消除了对PIA的需求,并且是处理互操作程序集的上乘方式。除非您的项目是从旧版本的VS开始的,否则它将自动设置为True。

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

关于c# - HTMLScriptElement在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5216194/

10-09 21:26