c# - Control webBrowser y errores de JavaScript.
.net winforms (6)
Cuando accedo a la página con el navegador (es decir, 9), el navegador se está mostrando correctamente.
Cuando uso el control WebBrowser tengo errores de JavaScript.
Sé que puedo suprimir los errores de los scripts, pero quiero que se ejecuten correctamente, ya que afectan la representación y la funcionalidad de la página.
Como puedó resolver esté problema ? ¿Puedo integrar IE9 directamente en Windows Form y usar métodos similares como con el control WebBrowser (navegar, obtener identificación, invocar clic)?
Gracias.
Así que sé que la publicación es antigua, pero fue un problema reciente para mí y tuve que hacer algunas excavaciones serias y pensar fuera de la caja.
Básicamente, como la mayoría de las respuestas aquí, no puede alterar el control del navegador web para usar el motor IE más reciente. el mío usa IE7 de forma predeterminada, he visto algunas respuestas que básicamente cambian / agregan cosas al registro, no siempre estoy cómodo cuando se trata del registro, una forma más limpia de solucionar este problema sería agregar un código en su sitio web que lo obligue a hacerlo. Utiliza el motor IE más actual en cualquier PC y funciona como un encanto.
Si tiene acceso al archivo web.config de la página que desea navegar, simplemente agregue:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
y su sitio forzaría el control del navegador web para ejecutar el motor de IE más actual en su computadora. Otras opciones se encuentran aquí:
https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode
Debo declarar que esto solo funcionaría si tiene acceso a la página / web.config del sitio web / aplicación a la que intenta acceder, que fue mi caso.
Como ayuda para quien más pueda tener este problema, probé todas estas cosas y nada me funcionó. Esto es lo que funciona. No estoy seguro de qué es exactamente lo que causa este error, pero aparentemente cuando solo presionas "F5" en VS para depurar tu aplicación, ejecuta YourProject.vshost.exe como el nombre del proceso. Si ejecuta la misma aplicación desde la línea de comandos, se mostrará como YourProject.exe y los errores de javascript desaparecerán. Creo que IE ve la aplicación ejecutando visa a través de VSHOST y decide que es sospechoso y desactiva el JavaScript para que no se cargue correctamente.
Entonces ... entra en la configuración de tu proyecto para tu ejecutable. Seleccione las opciones de "depuración". Seleccione "Iniciar programa externo". Busque y seleccione Depurar / YourProgram.exe (NO YourProgram.vshost.exe). Guarda, recompila y pulsa F5.
Todo debería funcionar como de costumbre ahora, y Visual Studio incluso se adjunta al proceso automáticamente.
¡Disfrutar!
Grego
El control WebBrowser
utiliza IE7. Entonces, si hay un problema, su secuencia de comandos no funciona para IE7 y tendrá que solucionarlo.
No puede integrar IE9 ya que depende de que esté instalado en la computadora y no todos tienen instalado IE9.
Lo que haría sería asignar un objeto a webbrowser.ObjectForScripting y luego inyectar una función javascript que asigna windown.onerror a un contenedor que llama al script externo en la aplicación host. Me gusta:
window.onerror = function(message, url, lineNumber)
{
window.external.errorHandler(message, url, lineNumber);
}
Consulte: http://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/
Puede usar la siguiente línea de código para deshacerse de esos tipos de errores:
webBrowser1.ScriptErrorsSuppressed = true;
Evitará errores de JavaScript.
Si tiene instalado IE9, WebBrowser seguirá usando el modo IE7 a menos que anule este comportamiento con una configuración de registro, como se describe en esta respuesta de . Esta es la causa más probable de los errores de JavaScript que está obteniendo en WebBrowser (porque no está viendo los mismos errores en IE9).
Puede realizar la configuración del registro usando el siguiente código c # (que establece el modo IE10 si se detecta Windows 8) y cambiando app-name.exe para que coincida con su propia aplicación. Debe agregar un controlador de errores para el caso de que no haya suficientes privilegios (se requieren privilegios de administrador para escribir en esta clave de registro).
string installkey = @"SOFTWARE/Microsoft/Internet Explorer/Main/FeatureControl/FEATURE_BROWSER_EMULATION";
string entryLabel = "app-name.exe";
System.OperatingSystem osInfo = System.Environment.OSVersion;
string version = osInfo.Version.Major.ToString() + ''.'' + osInfo.Version.Minor.ToString();
uint editFlag = (uint)((version == "6.2") ? 0x2710 : 0x2328); // 6.2 = Windows 8 and therefore IE10
RegistryKey existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, false); // readonly key
if (existingSubKey.GetValue(entryLabel) == null)
{
existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, true); // writable key
existingSubKey.SetValue(entryLabel, unchecked((int)editFlag), RegistryValueKind.DWord);
}