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