Блокирование диалоговых окон в.NET управление WebBrowser

Google ALTER TABLE DROP CONSTRAINT, затем ALTER TABLE ADD CONSTRAINT:

ALTER TABLE

Вот краткий пример:

CREATE TABLE A 
(
 ID INTEGER NOT NULL UNIQUE
);

CREATE TABLE B 
(
 ID INTEGER NOT NULL UNIQUE
    CONSTRAINT fk__B__A 
       REFERENCES A (ID)
);

-- Oops! Forgot the CASCADE referential actions.
-- DROP the constraint then recreate it:

ALTER TABLE B DROP
   CONSTRAINT fk__B__A;

ALTER TABLE B ADD
   CONSTRAINT fk__B__A
      FOREIGN KEY (ID)
      REFERENCES A (ID)
      ON DELETE CASCADE
      ON UPDATE CASCADE;

19
задан 8 revs, 3 users 100% 25 September 2008 в 11:12
поделиться

6 ответов

Это совершенно определенно hacky, но если Вы сделаете какую-либо работу с управлением WebBrowser, то Вы будете делать много материала hacky.

Это - самый легкий способ, которым я знаю о сделать это. Необходимо ввести JavaScript для переопределения аварийной функции... что-то вроде введения этой функции JavaScript:

window.alert = function () { }

существуют много способов сделать это , но очень возможно сделать. Одна возможность состоит в том, чтобы сцепить реализацию интерфейс DWebBrowserEvents2. После того как это сделано, можно затем включить NavigateComplete, DownloadComplete или DocumentComplete (или, как мы делаем, некоторое изменение этого), и затем назовите метод InjectJavaScript, который Вы реализовали, который выполняет это переопределение window.alert метода.

Как я сказал, hacky, но это работает :)

я могу вдаваться в большее количество подробностей, если я должен.

7
ответ дан 30 November 2019 в 03:12
поделиться

Мне удалось ввести код выше путем создания расширенного WebBroswer класс и переопределения OnNavigated метод.

Это, казалось, работало вполне хорошо:

class WebBrowserEx : WebBrowser
{
  public WebBrowserEx ()
  {
  }

  protected override void OnNavigated( WebBrowserNavigatedEventArgs e )
  {
       HtmlElement he = this.Document.GetElementsByTagName( "head" )[0];
       HtmlElement se = this.Document.CreateElement( "script" );
       mshtml.IHTMLScriptElement element = (mshtml.IHTMLScriptElement)se.DomElement;
       string alertBlocker = "window.alert = function () { }";
       element.text = alertBlocker;
       he.AppendChild( se );
       base.OnNavigated( e );
  }
}
0
ответ дан 30 November 2019 в 03:12
поделиться

Вы пытаетесь реализовать поисковый робот? У меня есть небольшой опыт в использовании размещенного управления IE, но я сделал завершился, несколько проектов Win32 пытались использовать управление IE. Отключение всплывающих окон должно быть сделано через обработчики событий управления, как Вы уже сделали, но я нашел, что также необходимо измениться, 'Отключают сценарий, отлаживающий xxxx' в опциях IE (или Вы могли изменить реестр в своих кодах) как cjheath уже указанный. Однако я также нашел, что дополнительные шаги должны были быть сделаны при проверке перешедшего URL для любого загружаемого содержания для предотвращения, они открываются/сохраняют диалоговые окна. Но я не знаю, как иметь дело с потоковой передачей файлов, так как я не могу пропустить их путем рассмотрения одних только URL, и в конце я обратился к библиотеке Indy, сохраняющей меня все проблемы имея дело с IE. Наконец, я помню, что Microsoft действительно упоминала что-то онлайн, что IE не разработан, чтобы использоваться в качестве управления OLE. Согласно моему собственному опыту, каждый раз, когда управление перешло к новой странице, действительно представлял утечки памяти для программ!

0
ответ дан 30 November 2019 в 03:12
поделиться

Вам, вероятно, придется настроить некоторые вещи, смотреть на IDocHostUIHandler и затем проверить некоторые из других связанных интерфейсов. У Вас может быть изрядное количество управления, даже на грани настройки диалогового окна display/ui (я не могу вспомнить, какой интерфейс делает это). Я вполне уверен, можно сделать то, что Вы хотите, но это действительно требует слоняния без дела во внутренностях MSHTML и способность реализовать различное COM интерфейсы.

Некоторые другие идеи: http://msdn.microsoft.com/en-us/library/aa770041.aspx

IHostDialogHelper
IDocHostShowUI

Они могут быть вещами, Вы смотрите на реализацию.

6
ответ дан 30 November 2019 в 03:12
поделиться

И для простого способа ввести ту волшебную строку JavaScript, читайте , как ввести JavaScript в управление webbrowser .

Или просто используют этот полный код:

private void InjectAlertBlocker() {
    HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
    HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
    string alertBlocker = "window.alert = function () { }";
    scriptEl.SetAttribute("text", alertBlocker);
    head.AppendChild(scriptEl);
}
13
ответ дан 30 November 2019 в 03:12
поделиться

Я просто опубликовал статью на Проекте Кода, который может помочь Вам.

посмотрите - http://www.codeproject.com/KB/shell/WebBrowserControlDialogs.aspx

Hope, которой это помогает.

2
ответ дан 30 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: