C#WebBrowser控件删除脚本标记(停止javascript执行)

时间:2012-08-31 17:53:32

标签: c# winforms webbrowser-control

我有一个使用Web浏览器控件的winforms应用程序。

当我访问页面时,此页面的代码如下:

(document).ready(function(){
window.print();
}

但我不希望在此页面上执行javascript。

在webBrowser1_DocumentCompleted事件上我试图从文档文本中删除脚本元素但找不到合适的事件,函数等。

有没有解决方法呢?

2 个答案:

答案 0 :(得分:2)

如果您遇到弹出式弹出窗口的问题,我已经为您提供了一个解决方案,如果您想在客户端计算机上禁用/启用javascript(甚至只是在启用/禁用时读取/查询)ive包括你的答案,我们走了:

您要禁用哪条弹出式消息?如果它是警告消息,请尝试这一点,显然根据您的特定需求解析窗口或框架对象,我只假设顶级文档,但如果您需要iframe,则可以使用window.frames(0)访问它。对于第一帧等等...(重新编写JavaScript部分)...这里有一些代码,假设WB是你的webbrowser控件......

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

但是,在您的情况下,由于您要禁用打印,只需将.alert换成.print

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

这是一个常量字符串(在VB中声明),它将摆脱4个弹出窗口,包括新的IE9弹出窗口。此外,它将摆脱onbeforeunload事件,它将在其运行的每个页面上执行所有这些操作。如果你有框架,你也不需要在框架中运行它们,只需在父文档中运行就足够了。在这里(在VB6中声明),_只是为了延伸而我放在那里以便于阅读,&用于字符串连接,并且;在javascript中只是意味着将下面的内容视为另一行代码。这样,您可以在一个物理行中运行多行代码(下面,我认为5)。

Public Const DEFAULT_JS_TO_RUN_AFTER_EACH_PAGE_LOAD As String = _
& "window.alert = function () { }; window.confirm = function () { }; " _
& "window.prompt = function () { }; window.print = function () { }; " _
& "window.onbeforeunload = function () { };"

如果要完全禁用JavaScript,可以使用注册表执行此操作,并且必须在webbrowser控件加载到内存之前更改注册表,并且每次更改它(on& off)时必须重新加载webbrowser控制进入内存(或只是重启你的应用程序)。

  

注册表项是   \ HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \互联网   Settings \ Zones \ - 键名为1400,禁用它的值为   3,并使其为0。

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

请告诉我你的进展情况,以及我是否可以继续提供帮助。

答案 1 :(得分:2)

初始化WebBrowser时,请使用此

webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(url);

希望这对你有用。