Проблемы с ActiveXObject в Angular 7

Я разрабатываю небольшой 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;
}

person 255.tar.xz    schedule 12.01.2019    source источник
comment
Разве вам не нравится это, когда примерно через 10 минут после того, как вы задаете вопрос, потому что вы так застряли, вы находите ответ и тратите время всех, черт возьми, это только что случилось, ребята! См. редактирование, если у вас есть тот же вопрос и вам нужен ответ.   -  person 255.tar.xz    schedule 12.01.2019
comment
Я слышал, что в нем меньше поддержки IE, но кто на самом деле больше использует IE? Это небезопасно, глючно, медленно, с плохим дизайном, меня мало волнует обнаружение поддержки FLASH, которое работает для IE...   -  person 255.tar.xz    schedule 12.01.2019


Ответы (2)


Эту проблему с ActiveXObject можно решить, как показано ниже: Перейдите к файлу tsconfig.json и добавьте библиотеку 'scripthost'. Затем перекомпилируйте приложение.

 "lib": [
  "es2017",
  "dom",
  "scripthost"
]
person Johnny Camby    schedule 13.08.2019

Ответ был здесь указан в комментариях (нужно внести незначительные изменения) (показано ниже)

меняться от:

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;
}
person 255.tar.xz    schedule 12.01.2019