Я разрабатываю небольшой page/router component
на веб-сайте, используя Angular 7 и его CLI. В какой-то момент мне нужно проверить, разрешил ли пользователь флэш-память, я делаю это так:
checkFlash() {
var hasFlash = false;
try {
hasFlash = Boolean(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
} catch (exception) {
hasFlash = "undefined" != typeof navigator.mimeTypes["application/x-shockwave-flash"];
}
return hasFlash;
}
Я нашел это здесь , и это прекрасно работает, но теперь, когда я очищаю свое приложение, я замечаю, что Angular, похоже, не нравится, на самом деле, он говорит, что ActiveXObject
не определено, но все еще работает.
Супер запутался ...
Я пытался связать реальный flash-объект, например $('embed[type="application/x-shockwave-flash"]')
или $('embed[type="application/x-shockwave-flash"]')[0]
, но безуспешно, он всегда возвращал true.
Я пытался установить дополнительные npm
(s), включая такие, как activex-support
и activex-data-support
, а также их @types
двоюродных братьев. После их настройки я узнал, что они ничего не сделали для моего дела.
Вот точные ошибки, которые CLI
& VScode
- Intellisense
дали мне:
VScode:
[ts] 'ActiveXObject' only refers to a type, but is being used as a value here. [2693]
any
CLI:
ERROR in src/app/games/games.component.ts(51,30): error TS2304: Cannot find name 'ActiveXObject'.
Эта ошибка не выдается при запуске внутри простого JS, но я огляделся и не могу понять, как запустить pure JS
внутри Angular 2 (7)
. Также посмотрел здесь без везения.
Пожалуйста, помогите, полностью потерянный здесь.
РЕДАКТИРОВАТЬ: нашел исправление ->
Ответ был здесь указан в комментариях (потребуется внести незначительные изменения) (показано ниже)
checkFlash() {
var hasFlash = false;
try {
hasFlash = Boolean(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
} catch (exception) {
hasFlash = "undefined" != typeof navigator.mimeTypes["application/x-
shockwave-flash"];
}
return hasFlash;
}
function checkFlash() {
var hasFlash = false;
try {
var flash =
navigator.mimeTypes &&
navigator.mimeTypes["application/x-shockwave-flash"]
? navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin
: 0;
if (flash) hasFlash = true;
} catch (e) {
if (navigator.mimeTypes["application/x-shockwave-flash"] != undefined)
hasFlash = true;
}
return hasFlash;
}