Проблемы с ActiveXObject в Angular 7 - PullRequest
0 голосов
/ 12 января 2019

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

1 Ответ

0 голосов
/ 12 января 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;
}

до:

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;
}
...