Javascript 为什么可以';我是否可以通过ie将此处理指令插入svg?

Javascript 为什么可以';我是否可以通过ie将此处理指令插入svg?,javascript,internet-explorer,Javascript,Internet Explorer,我正在通过js动态地将xml样式表引用设置到svg的顶部。svg已通过html中的对象标记导入页面。下面是函数: function setSvgXmlStylesheet() { var cssPath = $('#hdnServerRoot').val() + 'css/app.min.css'; var nodeValue = 'href="' + cssPath + '" type="text/css"'; var document = d3.select(glo

我正在通过js动态地将xml样式表引用设置到svg的顶部。svg已通过html中的对象标记导入页面。下面是函数:

function setSvgXmlStylesheet() {
    var cssPath = $('#hdnServerRoot').val() + 'css/app.min.css'; 
    var nodeValue = 'href="' + cssPath + '" type="text/css"';
    var document = d3.select(globals.MapContainer[0][0])[0][0];
    var pi = document.createProcessingInstruction('xml-stylesheet', nodeValue);
    var x = document.insertBefore(pi, document.firstChild);
}
这在Chrome中有效,但在ie中无效。我需要做些什么来确保这在ie中有效

更新

看起来这可能是IE的XmlSerializer差异的一个潜在问题。以下是我的svg的前几行:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

上面的注释作为document返回。IE中的childNodes[0]和我提供的js基于对象检查成功地在该节点上方插入了一个新的xml样式表节点。但是,由以下代码行生成的警报仅从下一行显示svg标记:

警报(新的XMLSerializer().serializeToString(文档))


我是否需要在IE中为本机Xmlserializer创建特殊配置,或者使用第三方js库或某种类型的polyfill?

您好,是的。。。。IE不喜欢adobe和inkscape等svg编辑器使用的未关闭的svg标记。。。。要调试这些问题,您需要设置IE的开发者消息。。。工具>Internet选项>高级选项卡,选中“始终记录开发人员控制台消息”…保存更改。。。。加载d3项目,然后按f12>控制台选项卡,svg自动关闭标记错误将被列出。Inkscape可以选择保存svg文件,而不使用一些编辑器添加的专有标记。在Visual Studio IDE中,intellisence.Thank还会突出显示非自关闭svg元素错误。我从上面提供的示例中删除了xml的第2行和第3行。svg最初按预期加载,没有问题。但是插入css引用的my js在ie上仍然不能成功工作,尽管它在Chrome3上仍然可以成功工作。开发控制台怎么说?还有错误吗?如果它能在其他浏览器中工作,但不能在IE中工作,那将是因为加载项或由于用户安全设置、ActiveX过滤或跟踪保护而被阻止的内容。。。。d3文档建议使用内联样式块。。。您可以通过将外部样式表调用替换为内联样式块来进行测试。。。然后使用DOM资源管理器,确认所有样式规则都按预期应用。。。。您需要提供复制链接以获得更多帮助。