如何以编程方式检测Windows桌面应用程序中是否启用了javascript? (WebBrowser控件)

时间:2012-08-29 04:34:07

标签: c# .net windows winforms webbrowser-control

我有一个应用程序,它将HTML写入.NET winforms应用程序中的WebBrowser控件。

如果Internet设置禁用Javascript(或Active Scripting),我想以某种方式以编程方式检测。

我猜你需要使用类似WMI的东西来查询IE安全设置。

编辑#1:重要的是,我知道在显示HTML之前是否启用了javascript,因此解决方案会修改DOM以显示警告或使用标记在我的特定情况下不适用。在我的情况下,如果javascript不可用,我将在本机RichTextBox中显示内容,而且我还想报告JS是否已启用回服务器应用程序,因此我可以告诉管理员发送5%或75%的警报用户是否启用了JS。

3 个答案:

答案 0 :(得分:5)

感谢@ Kickaha的建议。这是一个简单的方法,它检查注册表以查看它是否已设置。可能在某些情况下,这可能会引发异常,所以一定要处理它们。

    const string DWORD_FOR_ACTIVE_SCRIPTING = "1400";
    const string VALUE_FOR_DISABLED = "3";
    const string VALUE_FOR_ENABLED = "0";

    public static bool IsJavascriptEnabled( )
    {
        bool retVal = true;
        //get the registry key for Zone 3(Internet Zone)
        Microsoft.Win32.RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", true);

        if (key != null)
        {
            Object value = key.GetValue(DWORD_FOR_ACTIVE_SCRIPTING, VALUE_FOR_ENABLED);
            if( value.ToString().Equals(VALUE_FOR_DISABLED) )
            {
                retVal = false;
            }
        }
        return retVal;
    }

注意:为了保持此代码示例的简短(并且因为我只关心Internet区域) - 此方法仅检查Internet区域。您可以修改OpenSubKey行末尾的3来更改区域。

答案 1 :(得分:2)

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

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

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

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

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

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

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

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

答案 2 :(得分:1)

以下是建议 - 默认情况下将警告编码到您的网页中。创建一个在页面加载时运行的javascript,删除该元素。当不允许运行javascript时,警告就会出现。

很长一段时间以来,我编写了客户端HTML javascript与DOM交互,所以我可能有点过时了。即你需要修复细节,但我希望我能得到一般的想法。

<script>
document.getElemntByID("noJavascriptWarning").innerHTML="";
</script>

并在您的HTML正文中

<DIV id="noJavascriptWarning" name="noJavaScriptWarning">Please enable Javascript</DIV>