如何让 Angular 在 HTA 运行 IE 9 中工作?

How do I get Angular working in an HTA running IE 9?

我需要在引擎盖下开发一个 HTML application (HTA) to solve a business problem. I consider that using Angular 将大大简化开发。

我通过 ng new 创建了一个新的 Angular 项目并做了一些小改动(详见下文),但是当我 运行 构建的 HTA 文件时,我得到这个错误:

Error: 'console' is undefined

并且该页面从不在 HTA 中加载 window。

HTA 使用 IE 9(应用程序的要求不允许使用更高版本的浏览器),因此应用程序包含此元标记:

<meta http-equiv="X-UA-Compatible" content="IE=9">

Angular's documentation states that IE 9 is supported 如果我在 polyfills.ts 中取消注释所有必要的 polyfill,我已经完成了:

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';

我已将包含的 index.html 文件重命名为 index.hta 并在 .angular-cli.json 中进行了相应的更改。

我试过将下面的代码直接放到polyfills.ts中来规避缺失的console:

if (!window.console) console = {error: function() {}};

但是我根本无法构建,因为它不喜欢我重新定义 console:

ERROR in src/polyfills.ts(77,22): error TS2322: Type '{ error: () => void; }' is not assignable to type 'Console'.
  Property 'assert' is missing in type '{ error: () => void; }'.

有人可以从这里提出前进的方向吗?

我通过在 index.hta<app-root></app-root> 行下添加以下代码解决了这个问题:

<script>
  // HTAs don't have a console.
  console = {};
</script>

我现在收到“欢迎使用应用程序!”当我双击 HTA 文件时出现的屏幕。

看来 Angular 的构建过程并没有像主页中声明的 JavaScript 那样仔细。