9

I have an application which writes HTML to a WebBrowser control in a .NET winforms application.

I want to detect somehow programatically if the Internet Settings have Javascript (or Active Scripting rather) disabled.

I'm guessing you need to use something like WMI to query the IE Security Settings.

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

4

3 回答 3

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 以更改区域。

于 2012-08-31T04:52:39.467 回答
2

如果您在弹出弹出窗口时遇到问题,我已经为您提供了一个解决方案,并且如果您想在客户端机器上禁用/启用 javascript(或者甚至只是读取/查询它是否已启用/禁用),我已包含该答案对你来说,我们开始吧:

您要禁用哪个弹出消息?如果是警报消息,试试这个,显然解决窗口或框架对象以满足您的特定需求,我只是假设顶级文档,但如果您需要 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 对话框弹出消息,那么您真的不需要这样做。

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

于 2012-08-31T10:44:13.627 回答
1

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

自从我编写客户端 HTML javascript 以与 DOM 交互以来已经有很长一段时间了,所以我可能有点过时了。即您将需要修复细节,但我希望我能理解总体思路。

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

并在您的 HTML 正文中

<DIV id="noJavascriptWarning" name="noJavaScriptWarning">Please enable Javascript</DIV>
于 2012-08-29T04:45:55.660 回答