Отключить события кликов Javascript в C # WebBrowser - PullRequest
1 голос
/ 29 июня 2011

Введение:
Я работаю над проектом 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 уже был загружен, поэтому, опять же, я не могу предотвратить событие.

1 Ответ

0 голосов
/ 29 июня 2011

Насколько мне известно, нет способа отключить выполнение JavaScript в компоненте WebBrowser.Единственное, что вы можете сделать, это подавить сообщения об ошибках, установив для свойства ScriptErrorsSupressed значение false.Идея состояла бы в том, чтобы предварительно отфильтровать ваш HTML и удалить все ваши события «onclick» из HTML с помощью регулярных выражений, прежде чем вы отобразите свой HTML в компоненте WebBrowser.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...