Как программно определить, включен ли/отключен javascript в настольном приложении Windows? (элемент управления WebBrowser)
У меня есть приложение, которое записывает HTML в элемент управления WebBrowser в приложении .NET winforms.
Я хочу каким-то образом программно определить, отключены ли настройки интернета Javascript (или активные сценарии).
Я предполагаю, что вам нужно использовать что-то вроде WMI для запроса настроек безопасности IE.
редактировать #1: важно знать, включен ли javascript перед отображением решений HTML so, которые изменяют DOM для отображения предупреждения или использования тегов не применяются в моем конкретном случае. В моем случае, если javascript недоступен, я буду отображать содержимое в собственном RichTextBox, а также хочу сообщить, включен ли JS обратно в серверное приложение, чтобы я мог сказать администратору, который отправляет предупреждения, что 5% или 75% пользователей имеют JS включен или нет.
3 ответов
благодаря предложению @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", 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;
}
Примечание: в интересах сохранить этот образец кода коротким (и потому, что я заботился только о зоне Интернета) - этот метод проверяет только зону интернета. Вы можете изменить 3 в конце строки OpenSubKey, чтобы изменить зону.
Если у вас возникли проблемы с всплывающими окнами, я включил решение для вас, и если вы хотите отключить / включить javascript на клиентской машине (или даже просто прочитать / запрос, если он включен/ отключен), я включил этот ответ для вас, а здесь мы идем:
всплывающее сообщение, которое вы хотите отключить? Если это предупреждение, попробуйте это, очевидно, разрешая объект window или frame для ваших конкретных потребностей, я только что предположил документ верхнего уровня, но если вам нужен iframe вы можете получить доступ к нему через окно.кадры(0). для первого кадра и так далее... (re часть JavaScript)... вот некоторый код, предполагая, что WB - это ваш элемент управления webbrowser...
WB.Документ.parentWindow.окна execScript ".alert = function () {};","JScript"
вы должны запустить приведенный выше код только после загрузки всей страницы, я понимаю, что это очень сложно сделать (и полная версия еще не опубликована), однако я делаю это (полное доказательство) для некоторое время, и вы можете собрать подсказки о том, как это сделать точно, если вы прочитаете некоторые из моих предыдущих ответов с надписью "webbrowser" и "webbrowser-control", Но вернемся к вопросу под рукой, если вы хотите отменить .подтвердите сообщение JavaScript, просто замените окно.тревога с окном.подтвердите (конечно, квалифицируя ваше окно. объект с правильным объектом для достижения иерархии документов, с которой вы работаете). Вы также можете отключить .метод печати с вышеуказанным методом и новым ИЕ9 .метод подсказки также.
Если вы хотите полностью отключить JavaScript, вы можете использовать для этого реестр, и вы должны внести изменения в реестр до загрузки элемента управления webbrowser в память, и каждый раз, когда вы его меняете (on & off), вы должны перезагрузить элемент управления webbrowser и в память (или просто перезагрузить приложение).
ключ реестра \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\
- keyname является 1400
и значение для его отключения равно 3, а для включения-0.
Of конечно, поскольку под ключом зоны есть 5 зон, вам нужно либо изменить его для активной зоны, либо для всех зон. Однако вам действительно не нужно этого делать, если все, что вы хотите сделать, это подавить всплывающие сообщения JS dialog.
Дайте мне знать, как вы идете, и если я могу помочь дальше.
вот предложение-Закодируйте предупреждение на свою веб-страницу по умолчанию. Создайте javascript, который запускается при загрузке страницы, которая удаляет этот элемент. Предупреждение будет там, когда JavaScript не может работать.
прошло много времени с тех пор, как я закодировал клиентский HTML javascript для взаимодействия с DOM, поэтому я могу быть немного устаревшим. т. е. вам нужно будет исправить детали,но я надеюсь, что я получу общую идею.
<script>
document.getElemntByID("noJavascriptWarning").innerHTML="";
</script>
и в вашем HTML тело
<DIV id="noJavascriptWarning" name="noJavaScriptWarning">Please enable Javascript</DIV>