使用 Javascript 基于浏览器创建 Xml 文档
Create Xml document based on the browser using Javascript
我正在尝试让旧版应用程序在 Chrome 和 Edge 中运行。它目前仅适用于兼容模式。我已将其缩小到获取浏览器类型的位置,然后根据浏览器类型创建 xml 文档。
// Identify and return the browser type
function getBrowserType()
{
try
{
if (typeof ActiveXObject != 'undefined')
{
//Microsoft Internet Explorer
return 'MSIE';
}
else if (typeof document != 'undefined'
&& document.implementation
&& document.implementation.createDocument
&& typeof DOMParser != 'undefined')
{
//Other browsers
return 'OTH';
}
}
catch(ex)
{
alert('Unable to find browser type.\n' + ex.message);
}
}
//create the xml DOM by browser detection
function createDoc(browserType)
{
var xmlDOM = null;
if (browserType == 'MSIE')
{
try
{
var names = [ 'Msxml2.DOMDocument.6.0',
'Msxml2.DOMDocument.3.0',
'MSXML2.DOMDocument',
'MSXML.DOMDocument',
'Microsoft.XMLDOM' ];
for (var key in names)
{
try
{
xmlDOM = new ActiveXObject(names[key]);
}
catch(ex)
{}
}
}
catch(ex)
{
alert('Unable to create XML Document.\n' + ex.message);
}
}
else if (browserType == 'OTH')
{
try
{
xmlDOM = document.implementation.createDocument("", "", null);
}
catch(ex)
{
alert('Unable to create XML Document.\n' + ex.message);
}
}
return xmlDOM;
}
所以创建的对象不正确,不会创建xml文档。如果创建的对象是ActiveXObject,在兼容模式下是没有问题的。所以这是基于浏览器的。所以我基本上需要一种方法让它在所有浏览器中工作。我认为可能有更好的方法来执行此操作,因为这是非常旧的 2009 代码。
我已经在我这边测试了你的代码,我似乎无法检测到 IE 浏览器(我使用的是 IE 11)。
我建议您可以尝试使用 window.navigator.userAgent 属性 检测浏览器。代码如下:
if (window.navigator.userAgent.toLowerCase().indexOf("trident") > -1) {
//Microsoft Internet Explorer
return "IE";
}
因为,浏览器代理字符串如下:
[注意]导航器数据可以由浏览器所有者更改,如果未修改userAgent,用户可以使用上述方法检测浏览器使用JavaScript。
然后可以参考this article创建XMLDOM.
我正在尝试让旧版应用程序在 Chrome 和 Edge 中运行。它目前仅适用于兼容模式。我已将其缩小到获取浏览器类型的位置,然后根据浏览器类型创建 xml 文档。
// Identify and return the browser type
function getBrowserType()
{
try
{
if (typeof ActiveXObject != 'undefined')
{
//Microsoft Internet Explorer
return 'MSIE';
}
else if (typeof document != 'undefined'
&& document.implementation
&& document.implementation.createDocument
&& typeof DOMParser != 'undefined')
{
//Other browsers
return 'OTH';
}
}
catch(ex)
{
alert('Unable to find browser type.\n' + ex.message);
}
}
//create the xml DOM by browser detection
function createDoc(browserType)
{
var xmlDOM = null;
if (browserType == 'MSIE')
{
try
{
var names = [ 'Msxml2.DOMDocument.6.0',
'Msxml2.DOMDocument.3.0',
'MSXML2.DOMDocument',
'MSXML.DOMDocument',
'Microsoft.XMLDOM' ];
for (var key in names)
{
try
{
xmlDOM = new ActiveXObject(names[key]);
}
catch(ex)
{}
}
}
catch(ex)
{
alert('Unable to create XML Document.\n' + ex.message);
}
}
else if (browserType == 'OTH')
{
try
{
xmlDOM = document.implementation.createDocument("", "", null);
}
catch(ex)
{
alert('Unable to create XML Document.\n' + ex.message);
}
}
return xmlDOM;
}
所以创建的对象不正确,不会创建xml文档。如果创建的对象是ActiveXObject,在兼容模式下是没有问题的。所以这是基于浏览器的。所以我基本上需要一种方法让它在所有浏览器中工作。我认为可能有更好的方法来执行此操作,因为这是非常旧的 2009 代码。
我已经在我这边测试了你的代码,我似乎无法检测到 IE 浏览器(我使用的是 IE 11)。
我建议您可以尝试使用 window.navigator.userAgent 属性 检测浏览器。代码如下:
if (window.navigator.userAgent.toLowerCase().indexOf("trident") > -1) {
//Microsoft Internet Explorer
return "IE";
}
因为,浏览器代理字符串如下:
[注意]导航器数据可以由浏览器所有者更改,如果未修改userAgent,用户可以使用上述方法检测浏览器使用JavaScript。
然后可以参考this article创建XMLDOM.