【问题标题】:How to use ActiveXObject in Angular 4 project如何在 Angular 4 项目中使用 ActiveXObject
【发布时间】:2018-06-29 20:45:57
【问题描述】:

我正在尝试使用如下所示的 ActiveXObject

getActiveXObject(pdfCtrl) {
      return new ActiveXObject(pdfCtrl);
    }

    checkPDF() {
        let plugin = null;
            if (this.getBrowser() === 'ie') {
                plugin = this.getActiveXObject('AcroPDF.PDF') || this.getActiveXObject('PDF.PdfCtrl');
        }
        return plugin;
    }

它给出了诸如找不到 ActiveXObject 之类的错误。在普通的 JS 中这是可行的,但在 Angular/typesript 编译阶段它会抛出错误。我该如何处理?

【问题讨论】:

  • '它抛出错误' - 这什么也没告诉我们!请说明您遇到了什么错误。
  • 另外,我非常非常强烈地建议避免使用 ActiveX,除非您别无选择。任何现代浏览器都不支持它,并且有像 PDF.js 这样的原生 JS 库可以完成同样的工作。
  • ActiveXObject not found 是抛出的错误。
  • 有关于这个问题的消息吗?我也面临同样的问题

标签: angular typescript activexobject


【解决方案1】:

msxml 示例 - ActiveXObject 仅在 IE 中可用,在 Chrome 中使用本机方法:

 import * as ts from "typescript";
 ...
  private loadMsXml(src: string): any {
    let code: string = `({
      Run: (data: string): any => {
        let doc = new ActiveXObject("Msxml2.DOMDocument.6.0");
        doc.async = false;
        doc.loadXML(data);
        return doc;
      })`;
    const e = eval;
    let result = ts.transpile(code);
    let runnalbe: any = e(result);
    return runnalbe.Run(src);
  }

  private transformXml(xmlDoc: any, xsltDoc: any): string {
    if (this.isBrowserIE()) {
      let xmlDocMS = this.loadMsXml(new XMLSerializer().serializeToString(xmlDoc));
      let xslDocMS = this.loadMsXml(new XMLSerializer().serializeToString(xsltDoc));
      let resultXml = xmlDocMS.transformNode(xslDocMS);
      return resultXml;
    }

    let xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xsltDoc);
    let resultDoc = xsltProcessor.transformToDocument(xmlDoc);
    let resultXml = new XMLSerializer().serializeToString(resultDoc);
    return resultXml;
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-05-19
    • 2017-08-07
    相关资源
    最近更新 更多