Google ALTER TABLE DROP CONSTRAINT
, затем ALTER TABLE ADD CONSTRAINT
:
Вот краткий пример:
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;
Это совершенно определенно hacky, но если Вы сделаете какую-либо работу с управлением WebBrowser, то Вы будете делать много материала hacky.
Это - самый легкий способ, которым я знаю о сделать это. Необходимо ввести JavaScript для переопределения аварийной функции... что-то вроде введения этой функции JavaScript:
window.alert = function () { }
существуют много способов сделать это , но очень возможно сделать. Одна возможность состоит в том, чтобы сцепить реализацию интерфейс DWebBrowserEvents2. После того как это сделано, можно затем включить NavigateComplete, DownloadComplete или DocumentComplete (или, как мы делаем, некоторое изменение этого), и затем назовите метод InjectJavaScript, который Вы реализовали, который выполняет это переопределение window.alert метода.
Как я сказал, hacky, но это работает :)
я могу вдаваться в большее количество подробностей, если я должен.
Мне удалось ввести код выше путем создания расширенного 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 );
}
}
Вы пытаетесь реализовать поисковый робот? У меня есть небольшой опыт в использовании размещенного управления IE, но я сделал завершился, несколько проектов Win32 пытались использовать управление IE. Отключение всплывающих окон должно быть сделано через обработчики событий управления, как Вы уже сделали, но я нашел, что также необходимо измениться, 'Отключают сценарий, отлаживающий xxxx' в опциях IE (или Вы могли изменить реестр в своих кодах) как cjheath уже указанный. Однако я также нашел, что дополнительные шаги должны были быть сделаны при проверке перешедшего URL для любого загружаемого содержания для предотвращения, они открываются/сохраняют диалоговые окна. Но я не знаю, как иметь дело с потоковой передачей файлов, так как я не могу пропустить их путем рассмотрения одних только URL, и в конце я обратился к библиотеке Indy, сохраняющей меня все проблемы имея дело с IE. Наконец, я помню, что Microsoft действительно упоминала что-то онлайн, что IE не разработан, чтобы использоваться в качестве управления OLE. Согласно моему собственному опыту, каждый раз, когда управление перешло к новой странице, действительно представлял утечки памяти для программ!
Вам, вероятно, придется настроить некоторые вещи, смотреть на IDocHostUIHandler
и затем проверить некоторые из других связанных интерфейсов. У Вас может быть изрядное количество управления, даже на грани настройки диалогового окна display/ui (я не могу вспомнить, какой интерфейс делает это). Я вполне уверен, можно сделать то, что Вы хотите, но это действительно требует слоняния без дела во внутренностях MSHTML
и способность реализовать различное COM
интерфейсы.
Некоторые другие идеи: http://msdn.microsoft.com/en-us/library/aa770041.aspx
IHostDialogHelper
IDocHostShowUI
Они могут быть вещами, Вы смотрите на реализацию.
И для простого способа ввести ту волшебную строку 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);
}
Я просто опубликовал статью на Проекте Кода, который может помочь Вам.
посмотрите - http://www.codeproject.com/KB/shell/WebBrowserControlDialogs.aspx
Hope, которой это помогает.