我有一个应用程序,它将HTML写入.NET winforms应用程序中的WebBrowser控件。
如果Internet设置禁用Javascript(或Active Scripting),我想以某种方式以编程方式检测。
我猜你需要使用类似WMI的东西来查询IE安全设置。
编辑#1:重要的是,我知道在显示HTML之前是否启用了javascript,因此解决方案会修改DOM以显示警告或使用标记在我的特定情况下不适用。在我的情况下,如果javascript不可用,我将在本机RichTextBox中显示内容,而且我还想报告JS是否已启用回服务器应用程序,因此我可以告诉管理员发送5%或75%的警报用户是否启用了JS。
答案 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>