GWT 2.7: Предупредите пользователей, что они используют неподдерживаемый браузер

Недавно я обновил свое приложение до GWT 2.7 с GWT 2.5. Это заставило меня отказаться от поддержки IE6 и IE7.

Я хотел бы предоставить пользователям IE6 или IE7 предупреждение о том, что их браузер устарел и не будет работать. На данный момент, если вы зайдете в приложение с помощью одного из этих браузеров, вы получите пустой экран.

Я знаю, что есть несколько способов взломать что-то вместе, но я предпочел бы использовать способ GWT, а не какой-то взлом. Есть ли хук GWT для неподдерживаемых браузеров?

Вариант (взломать) 1

Перетащите это в мой main.html:

if(document.documentMode === 6 || document.documentMode === 7){
    myUnsupportedBrowserWarningFunction();
}

Потенциальная проблема заключается в том, что если кто-то использует браузер, который GWT не распознает, и я не распознаю (мобильная опера? Какой-то другой браузер), он все равно получит пустую страницу.

Вариант (взломать) Два

GWT ищет скомпилированный JS здесь:

gwt/myApp/ASDFKLSDJFLSFDJSLDFJLSJDFSDES.cache.js

Когда кто-то использует неподдерживаемый браузер, запрашивается (и не обнаруживается) следующее:

gwt/myApp/undefined.cache.js

Можно было бы создать undefined.cache.js и поместить туда свой неподдерживаемый код браузера. Очевидно, что это хрупкое решение, и оно сломается с будущими обновлениями GWT.

Третий вариант

Недавний патч (доступный в GWT 2.7) позволяет вам предоставить перестановку по умолчанию (например, сафари), если GWT не может обнаружить браузер, а с отложенной привязкой вы можете отобразить предупреждение о том, что предоставленное приложение может работать неправильно, поскольку браузер обычно не поддерживается по ГВТ.

-- J.

Источник

Я не хочу устанавливать перестановку по умолчанию для неподдерживаемых браузеров. Я хочу, чтобы сайт не работал и выводил предупреждение. Так что это решение на самом деле не обеспечивает то, что я ищу.

Похожие вопросы и сообщения


person sixtyfootersdude    schedule 25.02.2015    source источник


Ответы (2)


Для этого вы должны иметь возможность использовать onLoadErrorFn: https://code.google.com/p/google-web-toolkit/issues/detail?id=8135

<script>
  function gwtLoadError(errMsg) {
    // GWT app couldn't load, reason in errorMsg
  }
</script>
<meta name="gwt:onLoadErrorFn" content="gwtLoadError">

или, возможно, onPropertyErrorFn:

<script>
  function gwtPropError(propName, allowedValues, actualValue) {
    if (propName == 'user.agent') {
      // unsupported browser
    }
  }
</script>
<meta name="gwt:onPropertyErrorFn" content="gwtPropError">

(Я не думаю, что user.agent.runtimeWarning поможет в этом случае, но, возможно, посмотрите)

person Thomas Broyer    schedule 26.02.2015
comment
это похоже на то, что я хочу сделать. К сожалению, это не работает в моем приложении. Я поместил этот код на свою главную html-страницу. Когда я загружаю страницу в режиме документа 7, ни одна из этих функций не вызывается. - person sixtyfootersdude; 26.02.2015

Есть простой способ:

Условные комментарии

<!--[if lt IE 8]>
<p>You are using an unsupportet browser. Please perform an update</p>
<![endif]-->

Я думаю, что вариант 3 может быть лучшим, но есть проблема: это запустит фактическое приложение (которое все еще может быть несовместимым).

Если это проблема, и вы хотите получить четкое предупреждение, вы можете переписать сценарий выбора перестановки (вам потребуется обновить сценарий для будущих выпусков GWT).

Вам нужно будет скопировать этот источник:

https://gwt.googlesource.com/gwt/+/2.7.0/user/src/com/google/gwt/useragent/rebind/UserAgentPropertyGenerator.java

Вы можете добавить что-то вроде:

$wnd.Location.replace('nosupported.html');

между строками 90 и 91

person Christian Kuetbach    schedule 25.02.2015
comment
Это решение нормальное, но я бы сказал, что оно идентично моему варианту №1. Будет невозможно поймать все браузеры, которые не поддерживаются GWT. - person sixtyfootersdude; 25.02.2015
comment
Думал дело в старом браузере IE. - person Christian Kuetbach; 25.02.2015