【问题标题】:VB.NET WebBrowser disable javascriptVB.NET WebBrowser 禁用 javascript
【发布时间】:2010-11-12 11:18:26
【问题描述】:

有没有办法在 vb.net 中禁用 javascript webbrowser?

【问题讨论】:

  • 您是指在表单应用程序的 WebBrowser 控件中,还是在 Web 应用程序的用户 Web 浏览器中?
  • 其实是可以的,看我的回答。

标签: vb.net webbrowser-control


【解决方案1】:

为我工作:

Private Function TrimScript(ByVal htmlDocText As String) As String


    While htmlDocText.ToLower().IndexOf("<script type=""text/javascript"">") > -1
        Dim s_index As Integer = htmlDocText.ToLower().IndexOf("<script type=""text/javascript"">")
        Dim e_index As Integer = htmlDocText.ToLower().IndexOf("</script>")
        htmlDocText = htmlDocText.Remove(s_index, e_index - s_index)
    End While
    Return htmlDocText

End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim webClient As New System.Net.WebClient
    Dim result As String = webClient.DownloadString(yourUrl)
    Dim wb As New WebBrowser
    wb.Navigate("")
    Do While wb.ReadyState <> WebBrowserReadyState.Complete
        Application.DoEvents()
    Loop
    Dim script As String = TrimScript(result)
    wb.DocumentText = script

End Sub

【讨论】:

  • 不幸的是,如果他们只是使用&lt;script&gt; 或添加脚本作为属性(例如onload="alert('foo');"),这将不起作用。脚本代码可以通过多种方式插入,总会有遗漏的东西。
【解决方案2】:

简短的回答是:不。

略长一点的答案是:不,网络浏览器控制 API 不允许禁用标准浏览器功能。

【讨论】:

【解决方案3】:

真的没有...但是如果您收到令人讨厌的错误消息,弹出说脚本正在运行,那么您可以将 webbrowser 的 suppress-errors 的属性设置为“true”

【讨论】:

  • 其实可以的,看看我的消息。
【解决方案4】:

您要禁用哪个弹出消息?如果是警报消息,试试这个,显然根据您的特定需求解析窗口或框架对象,我只是假设顶级文档,但如果您需要 iframe,您可以使用 window.frames(0) 访问它。对于第一帧等等...(关于 JavaScript 部分)...这里有一些代码,假设 WB 是您的网络浏览器控件...

WB.Document.parentWindow.execScript "window.alert = function () { };", "JScript"

您必须在整个页面加载完成后才运行上述代码,我知道这很难做到(并且尚未发布完整证明版本)但是我一直在这样做(完整证明)一段时间以来,如果您阅读我之前标记为“webbrowser”和“webbrowser-control”的一些答案,您可以收集有关如何准确执行此操作的提示,但如果您想取消.confirm JavaScript 消息,只需将 window.alert 替换为 window.confirm(当然,使用正确的对象限定您的 window.object 以到达您正在使用的文档层次结构)。您还可以使用上述技术禁用 .print 方法以及新的 IE9 .prompt 方法。

如果您想完全禁用 JavaScript,您可以使用注册表来执行此操作,并且您必须在 webbrowser 控件加载到内存之前更改注册表,并且每次更改(打开和关闭)时都必须重新加载webbrowser 控制进出内存(或者只是重新启动您的应用程序)。

注册表键是\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ - 键名是1400,禁用它的值为3,启用它的值为0。

当然,因为 Zones 键下有 5 个区域,所以您需要为活动区域或所有区域更改它以确保确定。但是,如果您只想抑制 js 对话框弹出消息,您真的不需要这样做。

让我知道你的情况,如果我能提供进一步的帮助。

【讨论】:

  • 如果页面包含一些在页面完成加载之前执行的脚本怎么办?
猜你喜欢
  • 2023-03-31
  • 2011-01-29
  • 2011-09-24
  • 2013-12-30
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
相关资源
最近更新 更多