Введение:
Я работаю над проектом C # WinForms + WebBrowser.
Я бы хотел выполнить некоторую обработку при нажатии на гиперссылку.
Вот как я подключаю событие click к каждой гиперссылке в HTML-документе:
void webBrowser_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
HtmlElementCollection links = webBrowser.Document.Links;
foreach ( HtmlElement link in links )
{
link.Click += delegate { MessageBox.Show( "C# Click!" ); };
}
}
Проблема:
Приведенный выше код работает хорошо, но проблема в том, что я получаю сторонуэффекты из кода javascript, который также выполняет некоторые щелкающие действия.
Я понял, как трудно решить эту проблему во многих формах и формах.
Вот не столь очевидный примерjQuery действие, которое делает жизнь сложнее:
$(document).ready(function() {
$("a").click(function() {
alert("jQuery Click!");
});
});
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>>
</head>
<body>
<a href="#">Click Me!</a>
</body>
</html>
<html>
<body>
Здесь происходит следующее: при переходе по гиперссылке в элементе управления WebBrowser
- "jQuery Click!"Сначала появится предупреждение, и только после его закрытия появится «C # Click!»сообщение будет показано.
Вопрос:
Я искал далеко и широко, но пока не нашел ответа.
Как мог IC# -программно предотвращать выполнение jQuery или любой другой формы кода javascript в WebBrowser?
Пояснение:
Я хотел бы сказать, что я уже пытался изменить документ вразными способами, например, извлекая теги <script>
из webBrowser.DocumentText
и из внутреннего html-узла, и работая с HtmlElement
и базовыми IHtmlElement
объектами ...
Но не повезло ..
Изменение webBrowser.DocumentText
приводит к тому, что документ перезагружается из строки, и поэтому я теряю все учетные данные (например, cookie), которые были у меня на исходном сайте.И изменение IHtmlElement
объектов на самом деле не имеет значения, потому что сценарий jQuery уже был загружен, поэтому, опять же, я не могу предотвратить событие.