【问题标题】:Issues with ActiveXObject in Angular 7Angular 7 中的 ActiveXObject 问题
【发布时间】:2019-06-07 00:41:47
【问题描述】:

我正在使用 Angular 7 及其 CLI 在网站上开发一个小型 page/router component。有一次我需要检查用户是否允许闪光,我这样做是这样做的:

checkFlash() {
  var hasFlash = false;

  try {
    hasFlash = Boolean(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
  } catch (exception) {
    hasFlash = "undefined" != typeof navigator.mimeTypes["application/x-shockwave-flash"];
  }

  return hasFlash;
}

我在here 上找到了这个,它工作得很好,但是现在当我清理我的应用程序时,我注意到 Angular 似乎不喜欢这个,事实上,它说ActiveXObject 不是已定义,但它仍然有效。

超级迷茫……

我尝试像 $('embed[type="application/x-shockwave-flash"]')$('embed[type="application/x-shockwave-flash"]')[0] 那样链接一个实际的 flash 对象,但没有运气,它总是返回 true。

我尝试安装额外的npm(s),包括activex-supportactivex-data-support 以及它们的@types 表兄弟。设置它们后,我发现它们对我的案子没有任何帮助。

这是CLIVScode-Intellisense 给我的确切错误:

VScode:

[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 中运行时不会抛出此错误,但我环顾四周,似乎无法弄清楚如何在 Angular 2 (7) 中运行 pure JS。还看了here,没有运气。

请帮忙,完全迷路了。

编辑:找到解决方法 --> 答案是在 cmets 中列出的here(需要进行小改动)(如下所示)

  • 更改自:
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;
}

【问题讨论】:

  • 当你问一个问题大约 10 分钟后,你不只是喜欢它,因为你被困住了,你找到了答案,浪费了每个人的时间,真该死的,伙计们!如果您有同样的问题并需要答案,请查看编辑。
  • 我听说这个对 IE 的支持比较少,但是谁真的在用 IE 呢?它不安全、有缺陷、速度慢、设计不佳,我不太关心适用于 IE 的 FLASH 支持检测......

标签: node.js angular typescript activexobject


【解决方案1】:

答案已列在 cmets 中(需要稍作更改)(如下所示)

更改自:

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

【讨论】:

    【解决方案2】:

    ActiveXObject的这个问题可以解决如下: 转到您的 tsconfig.json 文件并添加“scripthost”库。 然后重新编译您的应用程序。

     "lib": [
      "es2017",
      "dom",
      "scripthost"
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 2020-09-24
      • 2019-09-11
      • 2012-06-24
      • 2019-05-09
      • 2019-09-16
      • 1970-01-01
      • 2019-08-26
      相关资源
      最近更新 更多