Angular 7中ActiveXObject的问题

时间:2019-01-12 07:27:34

标签: node.js angular typescript activexobject

我正在使用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似乎并不喜欢这个,实际上,它说{{1} }尚未定义,但仍然有效。

  

超级困惑...

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

我尝试安装额外的$('embed[type="application/x-shockwave-flash"]')[0],包括npmactivex-support以及它们的activex-data-support表亲。设置好它们之后,我发现它们没有帮助我的情况。

  

以下是@typesCLI-VScode给我的确切错误:

VScode:

Intellisense

CLI:

[ts] 'ActiveXObject' only refers to a type, but is being used as a value here. [2693] any

在纯JS内运行时不会引发此错误,但是我环顾四周,似乎无法弄清楚如何在ERROR in src/app/games/games.component.ts(51,30): error TS2304: Cannot find name 'ActiveXObject'.内运行pure JS。看上去也没有运气的here

  

请帮助,在这里完全迷路了。

     

编辑:找到了解决方法->   答案是here列在评论中(需要进行一些小的更改)(如下所示)

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

2 个答案:

答案 0 :(得分:0)

答案在此处列在评论中(需要进行一些小的更改)(如下所示)

更改自:

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)

ActiveXObject 的此问题可以通过以下方法解决:  转到您的 tsconfig.json 文件,然后添加“ scripthost ”库。  然后重新编译您的应用程序。

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