首页 > 解决方案 > 如何使用 ActiveXobject 在其他浏览器中支持使用 JavaScript?

问题描述

目前,下面指定的 javascript 函数在 IE 上运行良好,要求我也需要使用相同的函数在其他浏览器中显示内容。

我知道 IE 只支持 ActiveX 控件。谁能建议在javascript中替换此功能。

function show_packagemappings(target_letter) {
  // Load XML
  xml = new ActiveXObject("Msxml2.DOMDocument.6.0");
  xml.async=false;
  xml.load("xmldata\\map_packages.xml");

  xslt = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
  xslt.setProperty("AllowDocumentFunction",true);
  xslt.async=false;
  xslt.load("packagemappings.xsl");


  xslTemp = new ActiveXObject("Msxml2.XSLTemplate.6.0");
  xslTemp.stylesheet = xslt;

  xslProc = xslTemp.createProcessor();
  xslProc.input = xml;
  xslProc.addParameter("target_letter", target_letter);

  // Transform
  xslProc.transform;
  document.open()
  document.write(xslProc.output)
  document.close()
}

标签: javascriptactivexobject

解决方案


function show_packagemappings(target_letter)
{

    if (target_letter == '???') {
      document.getElementById("divElement").innerHTML = "";
      sessionStorage.target_letter = "";
      return;
    }

    sessionStorage.target_letter = target_letter;

    fn = "xmldata\\map_packages.xml"

    // console.log(fn);

    // code for IE
    if (window.ActiveXObject || "ActiveXObject" in window) {

      // Load XML
      xml = new ActiveXObject("Msxml2.DOMDocument.6.0");
      xml.async=false;
      xml.load(fn);

      if (xml.getElementsByTagName("target_letter")[0] == null) {
        var text = "<target_letter id='" + target_letter + "'>" 
                 + "<LastUpdate></LastUpdate>"
                 + "</target_letter>";

        var parser = new DOMParser();
        xml = parser.parseFromString(text,"text/xml");
      }

      console.log(xml.getElementsByTagName("target_letter")[0].getAttribute('id'));

      xslt = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
      xslt.setProperty("AllowDocumentFunction",true);
      xslt.async=false;
      xslt.load("packagemappings.xsl");

      xslTemp = new ActiveXObject("Msxml2.XSLTemplate.6.0");
      xslTemp.stylesheet = xslt;

      xslProc = xslTemp.createProcessor();
      xslProc.input = xml;
      xslProc.addParameter("target_letter", target_letter);

      // Transform
      xslProc.transform;
      document.getElementById("divElement").innerHTML = xslProc.output;

    }

    // code for Chrome, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {

      xhttp = new XMLHttpRequest();

      xhttp.open("GET", fn);

      // via Cache-Control header:
      xhttp.setRequestHeader("Cache-Control", "no-cache, no-store, max-age=0");

      // fallbacks for IE and older browsers:
      xhttp.setRequestHeader("Expires", "Tue, 01 Jan 1980 1:00:00 GMT");
      xhttp.setRequestHeader("Pragma", "no-cache");

      // Force the response to be parsed as XML
      xhttp.overrideMimeType('text/xml');

      xhttp.onload = function () {

        var xml;

        if (xhttp.readyState === xhttp.DONE && xhttp.status === 200) {
          xml = xhttp.responseXML;
        } else {
          var text = "<target_letter id='" + target_letter + "'>" 
                   + "<LastUpdate></LastUpdate>"
                   + "</target_letter>";

          var parser = new DOMParser();
          xml = parser.parseFromString(text,"text/xml");
        }

        xhr = new XMLHttpRequest();

        xhr.open("GET", "packagemappings.xsl");

        // Force the response to be parsed as XML
        xhr.overrideMimeType('text/xml');

        xhr.onload = function () {

          if (xhr.readyState === xhr.DONE && xhr.status === 200) {

            var xsl = xhr.responseXML;

            xsltProcessor = new XSLTProcessor();
            xsltProcessor.importStylesheet(xsl);
            xsltProcessor.setParameter(null,"target_letter",target_letter);
            resultDocument = xsltProcessor.transformToFragment(xml, document);
            document.getElementById("divElement").innerHTML = "";
            document.getElementById("divElement").appendChild(resultDocument);

          }
        }

        xhr.send("");

      };

      xhttp.send("");

    }

}

推荐阅读