2010-02-04 16 views
7

¿Hay alguna manera de saber si mi sitio está siendo accedido por una instancia del control del webbrowser? ¿Sería posible identificarlo por el agente de usuario w/php? ¿O tal vez algún javascript hackeo? ¿O es 100% idéntico al IE normal desde el lado del servidor?Detectar WebBrowser Control

+0

It _is_ IE. Es exactamente el mismo código, que yo sepa. –

+1

"Internet Explorer" es básicamente una interfaz de usuario delgada alrededor del control del navegador web. –

+0

Según [esta respuesta] (https://stackoverflow.com/a/4357982/1009922) y en [este artículo más reciente] (https://blogs.msdn.microsoft.com/patricka/2015/01/12/controlling-webbrowser-control-compatibility /), el control WebBrowser muestra 'MSIE 7.0' en su cadena de agente de usuario. Creo que esto no se distingue de un navegador IE7 real o un navegador IE más reciente en el modo de compatibilidad de la versión 7. – ConnorsFan

Respuesta

3

Solo una idea estúpida, pero ¿no podría simplemente comparar window.outerHeight con window.innerHeight, medir la diferencia esperada para IE y si no es así es el control WebBrowser?

Eso es hacky como el infierno, pero podría funcionar en la mayoría de los casos. También hay otras cosas que podría intentar hacer, cosas que funcionarían de cierta manera en IE, pero probablemente no funcionarán en un Control WebBrowser.

Por ejemplo:

  • descarga un archivo
  • abrir una nueva ventana/pestaña
+0

No veo cómo esto puede ser confiable. La diferencia entre 'outerHeight' y' innerHeight' se ve afectada por las preferencias del usuario. Mostrar u ocultar la barra de marcadores o el menú afectará la diferencia. (Conté cuatro opciones fácilmente accesibles en IE que afectan la diferencia). Tener el panel de depuración abierto o cerrado también lo afecta. Zoom también lo afecta. (No esperaba eso, pero aquí estamos). Luego hay cosas como preferencias generales de UI. Usar un tema diferente al predeterminado puede cambiar la diferencia entre los dos números. – Louis

2

Parece que un error específico se eleva cuando algo se le asigna a window.external. Por lo tanto, un cheque podría ser algo así como

const isWebBrowserControl =() => { 
    try { 
    window.external = window.external 
    return false 
    } catch (error) { 
    if (error.message === 'I don\'t remember this. Some specific error message.') { 
     return true 
    } 
} 

Esto es una verificación potencialmente "destructiva". Pero realmente no creo que cause ningún problema.

Cuestiones relacionadas