Кажется, это невозможно. Ошибка с Chrome в 2012 году с Chrome! https://bugs.chromium.org/p/chromium/issues/detail?id=150835
По некоторым причинам решение Richard не работало над моим концом (insertAdjacentText отказавший за исключением). Это однако, кажется, работает:
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function sayHello() { alert('hello') }";
head.AppendChild(scriptEl);
webBrowser1.Document.InvokeScript("sayHello");
Этот ответ объясняет, как добраться эти IHTMLScriptElement
интерфейс в Ваш проект.
То, что Вы хотите сделать, использовать Page. RegisterStartupScript (ключ, сценарий):
Посмотрите здесь для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/aa478975.aspx
, Что Вы в основном делаете, создать Вашу строку JavaScript, передать ее тому методу и дать ей уникальный идентификатор (в случае, при попытке зарегистрировать ее дважды на странице.)
РЕДАКТИРОВАНИЕ: Это - то, что Вы называете триггер счастливым. Не стесняйтесь вниз он. :)
Управляемая оболочка для документа HTML не полностью реализует функциональность, в которой Вы нуждаетесь, таким образом, необходимо опуститься в API MSHTML для выполнения то, что Вы хотите:
1) Добавляют ссылку на MSHTML, который, вероятно, назовут "Библиотекой объекта HTML Microsoft" под COM ссылки.
2) Добавляют 'использование mshtml'; к Вашим пространствам имен.
3) Получают ссылку на Ваш IHTMLElement элемента сценария:
IHTMLElement iScriptEl = (IHTMLElement)scriptEl.DomElement;
4) Вызов insertAdjacentText метод, с первым значением параметра "afterBegin". Все возможные значения перечислены здесь :
iScriptEl.insertAdjacentText("afterBegin", "function sayHello() { alert('hello') }");
5) Теперь Вы сможете видеть код в scriptEl. Свойство InnerText.
Hth, Richard
Можно всегда использовать свойство "DocumentStream" или "DocumentText". Для работы с документами HTML я рекомендую Пакет Гибкости HTML .
Если все, что вам действительно нужно, это запустить javascript, это будет проще всего ( VB .Net):
MyWebBrowser.Navigate("javascript:function foo(){alert('hello');}foo();")
Я предполагаю, что это не будет "вводить" его, но оно запустит вашу функцию, если это то, что вам нужно. (На всякий случай, если вы слишком усложнили проблему.) И если вы можете понять, как внедрить в javascript, поместите это в тело функции «foo» и позвольте javascript сделать инъекцию за вас.
Кроме того, в .NET 4 это еще проще, если вы используете ключевое слово dynamic:
dynamic document = this.browser.Document;
dynamic head = document.GetElementsByTagName("head")[0];
dynamic scriptEl = document.CreateElement("script");
scriptEl.text = ...;
head.AppendChild(scriptEl);
это решение, использующее mshtml
IHTMLDocument2 doc = new HTMLDocumentClass();
doc.write(new object[] { File.ReadAllText(filePath) });
doc.close();
IHTMLElement head = (IHTMLElement)((IHTMLElementCollection)doc.all.tags("head")).item(null, 0);
IHTMLScriptElement scriptObject = (IHTMLScriptElement)doc.createElement("script");
scriptObject.type = @"text/javascript";
scriptObject.text = @"function btn1_OnClick(str){
alert('you clicked' + str);
}";
((HTMLHeadElementClass)head).appendChild((IHTMLDOMNode)scriptObject);