WebBrowser 控件阻止 Next Url 导航

WebBrowser Control prevent Next Url navigated

我想知道是否有删除 WebBrowser 消息的方法

are you sure you want to navigate away from this page

当我尝试导航另一个 url 时,它发生了。

我试过这个方法

e.Cancel = False

WebBrowser1.Dispose()

WebBrowser1 = New WebBrowser

WebBrowser1.ScriptErrorsSuppressed = True

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

这是编码到网站中的,因此您必须在页面中注入一些 Javascript 以覆盖提示。

不过要小心这一点。这需要覆盖整个 window.onbeforeunload event handler,并且某些页面可能决定做的不仅仅是显示提示(可能保存数据或类似的东西)。

首先添加对 mshtml 的引用,这是设置脚本元素内容所必需的(归功于 Atanas Korchev):

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

  2. Select Browse 选项卡并导航到 C:\Windows\System32

  3. Select mshtml.tlb 然后按确定。

  4. Solution Explorer中,展开References节点。如果无法展开或不存在,请按 Solution Explorer.

  5. 顶部的 Show All Files 按钮
  6. Select 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()