2012-08-29 22 views
9

Tengo una aplicación que escribe HTML en un control WebBrowser en una aplicación .NET winforms.¿Cómo se puede detectar mediante programación si javascript está habilitado/deshabilitado en una aplicación de escritorio de Windows? (Control WebBrowser)

Quiero detectar de alguna manera programáticamente si la Configuración de Internet tiene Javascript (o más bien Active Scripting) deshabilitado.

Supongo que debe utilizar algo como WMI para consultar la configuración de seguridad de IE.

EDIT # 1: Es importante saber si javascript está habilitado antes de mostrar el HTML, por lo que las soluciones que modifican el DOM para mostrar una advertencia o que usan etiquetas no son aplicables en mi caso particular. En mi caso, si JavaScript no está disponible, mostraré el contenido en un RichTextBox nativo y también deseo informar si JS está habilitado de nuevo en la aplicación del servidor, así puedo decirle al administrador que envía las alertas que el 5% o el 75% de usuarios tienen JS habilitado o no.

+0

Espero que ya haya verificado esto? - http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/07df5263-613c-4780-89a2-67ebf2a1e670 – NinethSense

+0

@ blak3r mira mi respuesta, esto resolverá tus problemas. –

+0

@ Erx_VB.NExT.Coder Gracias por la buena respuesta. Sin embargo, usted llegó 5 horas tarde:/La respuesta que publiqué toma el mismo enfoque que describió para verificar el registro. Hizo +1 en su respuesta para completar. – blak3r

Respuesta

5

Gracias a la sugerencia de @ Kickaha. Aquí hay un método simple que verifica el registro para ver si está configurado. Probablemente algunos casos en los que esto podría arrojar una excepción, así que asegúrese de manejarlos.

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; 
    } 

Nota: en el interés de mantener este ejemplo de código corto (y debido a que sólo se preocupaba por la zona de Internet) - este método sólo comprueba la zona de Internet. Puede modificar el 3 al final de la línea OpenSubKey para cambiar la zona.

1

Aquí hay una sugerencia: codifique la advertencia en su página web de manera predeterminada. Cree un javascript que se ejecute en la carga de la página y elimine ese elemento. La advertencia estará allí cuando javascript no esté permitido ejecutar.

Hace mucho tiempo que codifiqué javascript HTML del lado del cliente para interactuar con DOM, por lo que podría estar un poco desactualizado. es decir, tendrá que arreglar los detalles, pero espero obtener la idea general.

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

y en su cuerpo HTML

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

Esta es una buena sugerencia para algunas personas. Pero tengo otros motivos que requieren que sepa si javascript está habilitado antes de mostrar HTML. Voy a A) quiero informar esto a un servidor para advertir a un administrador ... y B) si javascript no está habilitado, en su lugar, mostrar el contenido en un formato nativo. – blak3r

+0

Encontré este comentario en otro lugar de SO, sobre cómo configurar una cookie y tiene sentido. Estaba pensando en una solución artificial de un iFrame oculto que puede cargar otras páginas desde el servidor (que le permite enviar información al servidor en la cadena de consulta ... si no recuerdo mal ...) "No hay" Es una buena forma de realizar la detección de JavaScript en el lado del servidor. En su lugar, use JavaScript para establecer una cookie, y luego pruebe esa cookie usando secuencias de comandos del lado del servidor en vistas posteriores de la página, entregue el contenido de manera apropiada ". Le costará una actualización de página inicial o redirigirá ... – Kickaha

+0

sí, no se puede hacer la validación de JavaScript del lado del servidor ... cuando se trata de páginas web. Tengo una aplicación diferente en la que estoy mostrando mensajes al usuario. Como tengo una aplicación de escritorio, debería ser capaz de detectar esto y decirle al servidor. La solución sugerida que usa cookies es otra buena sugerencia, pero parece ser una forma más difícil de hacerlo, entonces debería ser. Además, no le dice a mi aplicación de escritorio si JavaScript está habilitado o no, sin hacer una búsqueda previa de werate en el servidor ¿Está habilitado JavaScript? en algo fuera del control web. – blak3r

2

Si tiene problemas con las ventanas emergentes apareciendo, he incluido una solución para usted, y si desea deshabilitar/habilitar javascript en la máquina del cliente (o simplemente leer/consultar si está habilitado/deshabilitado) También he incluido esa respuesta para usted, aquí vamos:

¿Qué mensaje emergente desea deshabilitar? Si es el mensaje de alerta, intente esto, obviamente resolviendo la ventana o el objeto de marco según sus necesidades particulares, acabo de asumir un documento de nivel superior, pero si necesita un iframe, puede acceder a él usando window.frames (0). para el primer fotograma y así sucesivamente ... (en la parte de JavaScript) ... aquí hay un código, suponiendo que WB es su control de navegador web ...

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

Debe ejecutar el código anterior solo después de que se haya terminado de cargar toda la página, entiendo que esto es muy difícil de hacer (y aún no se ha publicado una versión completa)) sin embargo, he estado haciéndolo (prueba completa) desde hace algún tiempo, y puede recopilar sugerencias sobre cómo hacerlo con precisión si lee algunas de mis respuestas anteriores con la etiqueta "webbrowser" y "webbrowser-control", pero volviendo a la pregunta en cuestión, si desea cancelar el mensaje de confirmación de JavaScript, simplemente reemplace window.alert con window.confirm (por supuesto, calificando su ventana. obje ct con el objeto correcto para llegar a la jerarquía de documentos con la que está trabajando). También puedes desactivar el.imprima el método con la técnica anterior y el nuevo método IE9 .prompt también.

Si desea deshabilitar completamente JavaScript, puede usar el registro para hacer esto, y debe hacer que el registro cambie antes de que el control del navegador web se cargue en la memoria, y cada vez que lo cambie (en & apagado) debe volver a cargar el control del navegador web y en la memoria (o simplemente reinicie su aplicación).

La clave de registro es \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ - el nombre de clave es 1400 y el valor para deshabilitar es 3, y permitir que ésta es 0.

Por supuesto, porque hay 5 zonas debajo de las zonas clave, es necesario cambiarlo por la zona activa o por todas las zonas para estar seguro. Sin embargo, realmente no necesita hacer esto si todo lo que quiere hacer es suprimir los mensajes emergentes de diálogo js.

Déjame saber cómo vas y si puedo ayudarte más.

Cuestiones relacionadas