WebBrowser控件阻止导航下一个网址

时间:2018-09-23 04:15:24

标签: javascript vb.net webbrowser-control onbeforeunload

我想知道是否仍然可以删除WebBrowser消息

  

确定要离开此页面

当我尝试浏览另一个URL时,它会发生。

Erro picture

我尝试过这种方法

e.Cancel = False

WebBrowser1.Dispose()

WebBrowser1 = New WebBrowser

WebBrowser1.ScriptErrorsSuppressed = True

WebBrowser1.Navigate(New Uri("https://www.google.com"))

1 个答案:

答案 0 :(得分:0)

该代码已编码到网站中,因此您必须在页面中注入一些Javascript才能覆盖提示。

但是请小心。这需要覆盖整个window.onbeforeunload event handler,并且某些页面可能已经决定要做更多的工作,而不仅仅是显示提示(也许保存数据或类似内容)。

首先要添加对mshtml的引用,这是必需的,以便能够设置脚本元素的内容(贷方为Atanas Korchev):

  1. Solution Explorer中右键单击您的项目,然后按Add Reference...

  2. 选择Browse标签,然后导航至C:\Windows\System32

  3. 选择mshtml.tlb并按OK。

  4. Solution Explorer中,展开References节点。如果您无法展开它或它不存在,请按Show All Files顶部的Solution Explorer按钮。

  5. 选择mshtml引用,转到Property Window并确保将Embed Interop Types设置为True

现在您可以使用以下代码:

Private Sub RemoveOnBeforeUnloadPrompt()
    If WebBrowser1.Document IsNot Nothing AndAlso WebBrowser1.Document.Body IsNot Nothing Then
        'Create a <script> tag.
        Dim ScriptElement As HtmlElement = WebBrowser1.Document.CreateElement("script")
        ScriptElement.SetAttribute("type", "text/javascript")

        'Insert code to override the window.onbeforeunload event handler.
        CType(ScriptElement.DomElement, mshtml.IHTMLScriptElement).text = "function __removeOnBeforeUnload() { window.onbeforeunload = function() {}; }"

        'Append script to the web page.
        WebBrowser1.Document.Body.AppendChild(ScriptElement)

        'Run the script.
        WebBrowser1.Document.InvokeScript("__removeOnBeforeUnload")
    End If
End Sub

然后,之前,您导航到一个新的页面调用:

RemoveOnBeforeUnloadPrompt()