javascript - 如何使用 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()
}
解决方案
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("");
}
}
推荐阅读
- awk - 如何获取 awk 脚本正在处理的文件号?
- sql - 如何查询gap发现子表周期覆盖了整个父表周期
- javascript - VBA / Internet Explorer:从 OnClick 事件中捕获结果 URL
- mysql - 用 SQL 条目做数学运算
- r - if (start > end) stop("'start' cannot be after 'end'") 出错:尝试执行分钟预测时 R 中需要 TRUE/FALSE 的缺失值
- rstudio - 无法使用、加载或安装 RStudio 包“摘要”
- powerbi - PBI 中逐行的百分位函数
- android - react-native-keyboard-aware-scroll-view中平台之间的不同行为
- windows - windows下使用go 1.13构建dll
- javascript - 如何在 jest 的覆盖范围内忽略 jest 生成的快照?