代码改变世界

关于javascript, 在 new ActiveXObject("MSXML")时错误 解决办法

2008-10-17 10:43  jeff-zheng  阅读(2244)  评论(0)    收藏  举报

   系统清理后,不知什么原因, 运行以前写的创建 xml 、xsl 对象的代码总是报错,代码如下:

function CreateDocument(objectType) {
    var aVersions, oXmlDom;
    switch (objectType) {
        case 1:
            //使用"MSXML2.FreeThreadedDOMDocument.6.0"转换时出错
            //大概查了一下,是安全性做了限制
            aVersions = ["MSXML2.FreeThreadedDOMDocument.5.0",
                             "MSXML2.FreeThreadedDOMDocument.4.0",
                             "MSXML2.FreeThreadedDOMDocument.3.0",
                             "MSXML.FreeThreadedDOMDocument",
                             "Microsoft.XmlDom"
                            ];
            break;
        case 2:
            //使用"MSXML2.XSLTemplate.6.0"转换时出错
            //大概查了一下,是安全性做了限制
            aVersions = ["MSXML2.XSLTemplate.5.0",
                             "MSXML2.XSLTemplate.4.0",
                             "MSXML2.XSLTemplate.3.0",
                             "MSXML.XSLTemplate",
                             "Microsoft.XmlDom"
                            ];
            break;
        default:
            aVersions = ["MSXML2.DOMDocument.6.0",
                             "MSXML2.DOMDocument.5.0",
                             "MSXML2.DOMDocument.4.0",
                             "MSXML2.DOMDocument.3.0",
                             "MSXML.DOMDocument",
                             "Microsoft.XmlDom"
                            ];
            break;
    }

    for (var i = 0; i < aVersions.length; i++) {
        try {
            oXmlDom = new ActiveXObject(aVersions[i]);
            break;
        }
        catch (error) {
            // 不做任何处理
        }
    }
    if (oXmlDom == null) {
        throw new Error("MSXML没有安装");
    }

    return oXmlDom;

}

标红的位置总是出做,重新安装了msxml.mis、注册msxml(regsvr32 msxml4.dll)也不行,调试中找到错误原因:automation服务器不能创建对象,最后网上查询找到了解决办法:

一:主要是Scripting.FileSystemObject (FSO 文本文件读写)被关闭了,开启FSO功能即可,在“运行”中执行regsvr32 scrrun.dll
二:如果javascript脚本中报这个错误是因为IE的安全设置不允许运行未标记为安全的activeX控件 更改IE的安全设置,把相应的选项打开即可。
有时用上面“解决”中所提的方法不是100%成功的,因为毕竟导致同样现象的原因并不是只会有一个,这个亦是一个思路。如果是在安装某个软件后出现这种问题,可卸载该软件或重装一下!