2010-02-04 7 views
7

Y at-il un moyen de savoir si mon site est accédé par une instance de contrôle webbrowser? Serait-il possible de l'identifier par l'agent utilisateur w/php? Ou peut-être un peu de javascript? Ou est-ce 100% identique à l'IE ordinaire du côté du serveur?Détecter le contrôle WebBrowser

+0

C'est IE. C'est exactement le même code, pour autant que je sache. –

+1

"Internet Explorer" est essentiellement une interface utilisateur fine autour du contrôle du navigateur Web. –

+0

Selon [cette réponse] (https://stackoverflow.com/a/4357982/1009922) et [cet article plus récent] (https://blogs.msdn.microsoft.com/patricka/2015/01/12/control-webbrowser-control-compatibility /), le contrôle WebBrowser montre 'MSIE 7.0' dans sa chaîne user-agent. Je pense que cela ne se distingue pas d'un navigateur IE7 réel ou un navigateur IE plus récent en mode de compatibilité version 7. – ConnorsFan

Répondre

3

Juste une idée stupide, mais ne pourriez-vous pas simplement comparer window.outerHeight avec window.innerHeight, mesurer la différence attendue pour IE et si ce n'est pas alors le WebBrowser Control?

Cest hacky comme l'enfer, mais pourrait fonctionner dans la plupart des cas. Il y a aussi d'autres choses que vous pourriez essayer de faire, des choses qui fonctionneraient d'une certaine manière dans IE mais qui ne fonctionneraient probablement pas dans un contrôle WebBrowser.

Par exemple:

  • télécharger un fichier
  • ouvrir une nouvelle fenêtre/onglet
+0

Je ne vois pas comment cela peut être fiable. La différence entre 'outerHeight' et' innerHeight' est affectée par les préférences de l'utilisateur. Afficher ou masquer la barre de favoris ou le menu affectera la différence. (J'ai compté 4 options facilement accessibles dans IE qui affectent la différence.) Avoir le panneau de débogage ouvert ou fermé l'affecte également. Le zoom l'affecte aussi. (Je ne m'attendais pas à cela, mais nous y sommes.) Ensuite, il y a des choses comme les préférences générales de l'interface utilisateur. L'utilisation d'un thème différent de la valeur par défaut peut changer la différence entre les deux nombres. – Louis

2

Il semble qu'une erreur spécifique est déclenché lorsque tout est affecté à window.external. Donc, une vérification pourrait être quelque chose comme

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

Ceci est un contrôle potentiellement "destructif", cependant. Mais je ne pense vraiment pas que cela causerait un problème.

Questions connexes