У меня есть приложение angular6, которое мы поддерживаем только с хромом, но я хотел бы, чтобы появилась страница / сообщение о попытках пользователя перейти к приложению в IE, в котором говорится, что оно не поддерживается, либо вставьте эту ссылку в Chrome, либо загрузите хром .
Нужен ли мне полифилл, чтобы приложение могло работать в IE, чтобы отображать это сообщение, или есть какое-то обнаружение браузера, которое я могу использовать, чтобы отображать только это всплывающее окно?
Я знаю, что вы можете выполнять обнаружение браузера в TS, который у меня есть, но это означает, что мне нужен полифилл IE, чтобы приложение загружалось даже для отображения страницы.
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
var output = 'Detecting browsers by ducktyping:<hr>';
output += 'isFirefox: ' + isFirefox + '<br>';
output += 'isChrome: ' + isChrome + '<br>';
output += 'isSafari: ' + isSafari + '<br>';
output += 'isOpera: ' + isOpera + '<br>';
output += 'isIE: ' + isIE + '<br>';
output += 'isEdge: ' + isEdge + '<br>';
output += 'isBlink: ' + isBlink + '<br>';
document.body.innerHTML = output;
Мысли? Спасибо!





В ngOninit в app.component.ts используйте блок if else. В приведенном ниже примере пользователь возвращается на предыдущую (не Angular) страницу после закрытия предупреждения, поэтому остальная часть angular не загружается.
if (isIE) {
alert('Message for users about not using IE');
window.history.go(-1);
} else {
// the rest of ngOnInit
}
Вы также можете добавить это в index.html:
<script>
var browserName = getBrowserName();
if (browserName == 'ie') {
alert("IE is not supported")
}
function getBrowserName() {
const agent = window.navigator.userAgent.toLowerCase()
switch (true) {
case agent.indexOf('edge') > -1:
return 'edge';
case agent.indexOf('opr') > -1 && !!(window).opr:
return 'opera';
case agent.indexOf('chrome') > -1 && !!(window).chrome:
return 'chrome';
case agent.indexOf('trident') > -1:
return 'ie';
case agent.indexOf('firefox') > -1:
return 'firefox';
case agent.indexOf('safari') > -1:
return 'safari';
default:
return 'other';
}
}
</script>
window.navigator.userAgent содержит пользовательский агент как string. Чтобы обнаружить браузер, нужно разобрать userAgent.
Для обнаружения Microsoft Internet Explorer и Microsoft Edge мы используем условие
window.navigator.userAgent.toLowerCase().indexOf('trident') > -1 ||
window.navigator.userAgent.toLowerCase().indexOf('edge') > -1
bowsernpm install bowserТеперь импортируйте и получите детали
import * as Bowser from "bowser";
// ......
userAgent = Bowser.parse(window.navigator.userAgent);
browser = Bowser.getParser(window.navigator.userAgent);
Пример: https://stackblitz.com/edit/angular-bowser
P.S: Также обратите внимание, что navigator.userAgent.toLowerCase().indexOf('edge') > -1 не работает для Microsoft Edge Beta (текущая версия = 79.0.309.43), поскольку userAgent является
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 Safari/537.36 Edg/79.0.309.43
попробуй это. github.com/DamonOehlman/detect-browser или github.com/lancedikson/bowser