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):
在 Solution Explorer
中右键单击您的项目,然后按 Add Reference...
。
Select Browse
选项卡并导航到 C:\Windows\System32
Select mshtml.tlb
然后按确定。
在Solution Explorer
中,展开References
节点。如果无法展开或不存在,请按 Solution Explorer
.
顶部的 Show All Files
按钮
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()
我想知道是否有删除 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):
在
Solution Explorer
中右键单击您的项目,然后按Add Reference...
。Select
Browse
选项卡并导航到C:\Windows\System32
Select
mshtml.tlb
然后按确定。在
Solution Explorer
中,展开References
节点。如果无法展开或不存在,请按Solution Explorer
. 顶部的 Select
mshtml
参考,转到Property Window
并确保Embed Interop Types
设置为True
。
Show All Files
按钮
现在您可以使用此代码:
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()