首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不使用xlink链接?

为什么不使用xlink链接?
EN

Stack Overflow用户
提问于 2013-03-14 02:24:26
回答 1查看 362关注 0票数 0

当从另一个源加载和附加包含xlink的SVG文件时,xlink不会链接。我在加载本地文件和从服务器加载文件时遇到了问题。文件加载,所有SVG都在DOM中。除了xlink不能链接之外,一切都运行得很好。我将此代码用于本地文件。

代码语言:javascript
复制
    xmlDoc = document.implementation.createDocument('http://www.w3.org/2000/svg', 'svg:svg', null);
    xmlDocRoot = xmlDoc.documentElement;

    if (fil[0])
    {
        var blobURLref = window.URL.createObjectURL(fil[0]);

        xmlDoc.onload = function(evt) {
            xmlDocRoot = xmlDoc.documentElement;
            SVGRootImgs.appendChild(xmlDocRoot);
        }
        xmlDoc.src = xmlDoc.load(blobURLref);   

        window.URL.revokeObjectURL(blobURLref);
    }

其中,file是使用files方法加载的本地文件。有了这段代码,xlink就会链接起来。当我尝试从服务器加载时,我尝试了以下代码。

代码语言:javascript
复制
        htmlObjImgs = document.getElementById("hom_img");
        SVGDocImgs = htmlObjImgs.getSVGDocument();
        var crt_date = new Date();
        var fd = new FormData();
        fd.append('usrname', usr_nam);
        fd.append('filename', fil_nam);
        var xhr = new XMLHttpRequest();

        xhr.onload = function() {  

            SVGRootImgs = SVGDocImgs.documentElement;
            var rspns_xhr = xhr.responseXML.documentElement;

            ld_tag_nods(ld_nodes = rspns_xhr.getElementsByTagNameNS(svgns, 'svg'), function(){

                var svg_fil = SVGDocImgs.createElementNS(svgns, "svg");

                ld_svg_fil(svg_fil = SVGDocImgs.importNode(ld_nodes[0], true), function(){

                    SVGRootImgs.appendChild(svg_fil);
                });
            });
        }  
        xhr.onerror = function() {  
            dump("Error while getting XML.");  
        }  
        xhr.open('POST', 'ld_fil.php?nocache='+crt_date, true);
        xhr.responseType = "document";
        xhr.overrideMimeType("image/svg+xml");
        xhr.send(fd);

其中ld_tag_nods()和ld_svg_fil()是未定义的回调。

这段代码将100%加载所有内容,包括xlink,但xlink不会链接。任何不使用xlink的SVG都会显示,但使用xlink的任何SVG都不会显示。

我应该注意的是,本地文件和服务器文件使用相同的文件。该文件的SVG标记中包含xlink引用。

我想我能找到一个绕过这个问题的方法。例如,我可以创建一个指向blob的URL,这可能会起作用。但是,我想知道为什么服务器代码xlink不能链接。是不是因为这些文件来自国外?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-16 13:37:49

我认为当节点从一个文档转移到另一个文档时,应该使用importNode()。如果我跳过importNode(),该文件将加载所有链接的xlink。我也没有收到任何错误或警告。我想我让它工作了,但我肯定不理解它的过程。这就是可以工作的代码。

代码语言:javascript
复制
htmlObjImgs = document.getElementById("hom_img");
SVGDocImgs = htmlObjImgs.getSVGDocument();
SVGRootImgs = SVGDocImgs.documentElement;

var crt_date = new Date();
var fd = new FormData();
fd.append('usrname', usr_nam);
fd.append('filename', fil_nam);
var xhr = new XMLHttpRequest();

xhr.onload = function() {  
  SVGRootImgs.appendChild(xhr.responseXML.documentElement);
}  
xhr.onerror = function() {  
  dump("Error while getting XML.");  
}  
xhr.open('POST', 'ld_fil.php?nocache='+crt_date, true);
xhr.responseType = "document";
xhr.overrideMimeType("image/svg+xml");
xhr.send(fd);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15393469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档