Подтвердить что ты не робот

Где IHTMLScriptElement?

Я только начал использовать Visual Studio 2010 С# IDE сегодня.

Я пытаюсь вставить javascript в компонент WebBrowser и следовать за ответом из stackoverflow:

Как добавить Javascript в элемент управления WebBrowser?

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" (который не работал..)

4b9b3361

Ответ 1

Project + Добавить ссылку, выберите Microsoft.mshtml. Если он не отображается в списке (это PIA), используйте вкладку "Обзор" и выберите c:\windows\system32\mshtml.tlb

Добавить директиву использования в верхней части файла исходного кода:

using mshtml;

Помните, что у вас есть детализация развертывания. Если PIA не установлен на целевой машине, что маловероятно, то лучше всего установить свойство Copy Local для ссылки на сборку на True. Это создает файл Microsoft.mshtml.dll в папке сборки. Скопируйте его вместе с EXE на целевую машину. Есть несколько случаев, когда требуется PIA, а не этот.


Обновление для этого старого сообщения,.NET 4+ и VS2010 + теперь поддерживают свойство ссылочной сборки "Вставить типы взаимодействия". Также известна как функция "Нет PIA". Это устаревает необходимость в PIA и является лучшим способом работы с сборками interop. Он настроен на True автоматически, если ваш проект не запущен в старой версии VS.

У него нет нисходящих сторон, вам больше не нужно развертывать сборку interop, а используемые вами типы взаимодействия теперь встроены в ваш исполняемый файл. Только те, которые вы используете. В вашем коде может потребоваться небольшое изменение, если теперь вы создаете COM-объект с помощью new XxxxClass(), тогда вам нужно удалить часть имени класса.

Ответ 2

IHTMLScriptElement определяется в Mshtml. Вам нужно добавить ссылку на библиотеку объектов Microsoft HTML, а затем добавить "using mshtml" для VS для разрешения IHTMLScriptElement.

Ответ 3

Я бы порекомендовал этот ответ для решения, управляемого только для ввода javascript, который не требует развертывания PIA, как mshtml.

Ответ 4

Он находится в файле Mshtml.dll.

Свойство System.Windows.Forms.HtmlElement DomElement имеет объект типа, но на самом деле является указателем COM IUnknown для этого элемента, который можно применить к одному из интерфейсов HTML-элемента, например mshtml.IHTMLScriptElement.