2010-02-04 4 views
7

Есть ли способ, которым я могу определить, доступен ли мой сайт экземпляром элемента управления веб-браузером? Можно ли идентифицировать его пользовательским агентом w/php? Или, может быть, javascript взломать? Или он на 100% идентичен обычным IE со стороны сервера?Обнаружение элемента управления WebBrowser

+0

Это _is_ IE. Насколько я знаю, это точно такой же код. –

+1

«Internet Explorer» - это в основном тонкий пользовательский интерфейс вокруг элемента управления веб-браузера. –

+0

В соответствии с [этим ответом] (https://stackoverflow.com/a/4357982/1009922) и [этой более поздней статье] (https://blogs.msdn.microsoft.com/patricka/2015/01/12/control-webbrowser-control-compatible /), элемент управления WebBrowser показывает 'MSIE 7.0' в своей строке пользовательского агента. Я думаю, что это не отличается от реального браузера IE7 или более позднего браузера IE в режиме совместимости версии 7. – ConnorsFan

ответ

3

Просто глупая идея, но не могли бы вы просто сравнить window.outerHeight с window.innerHeight, измерить ожидаемую разницу для IE, и если это не ее контроль WebBrowser?

Thats hacky as hell, но может работать в большинстве случаев. Есть и другие вещи, которые вы могли бы попытаться сделать, вещи, которые будут работать определенным образом в IE, но, вероятно, не будут работать в WebBrowser Control.

Например:

  • загрузить файл
  • открывать новое окно/вкладку
+0

Я не вижу, как это может быть надежным. Разница между 'externalHeight' и' innerHeight' зависит от предпочтений пользователя. Отображение или скрытие панели закладок или меню повлияет на разницу. (Я подсчитал 4 легкодоступных параметра в IE, которые влияют на разницу.) Отключение или отключение панели отладки также влияет на нее. Zoom также влияет на него. (Я этого не ожидал, но мы здесь.) Тогда есть такие вещи, как общие настройки пользовательского интерфейса. Использование темы, отличной от значения по умолчанию, может изменить разницу между двумя числами. – Louis

2

, кажется, что конкретная ошибка возникает, когда что-либо назначается window.external. Таким образом, проверка может быть чем-то вроде

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

Это потенциально «разрушительная» проверка. Но я действительно не чувствую, что это вызовет какие-либо проблемы.

Смежные вопросы