3

在 FF 和 IE 中,调用时会检索 SVG (SVG) 文档$(document ).ready()

在 Chrome 中,调用getSVGDocument时返回 null 而不是。$(document ).ready()(虽然它似乎在大约 7 毫秒后找到它,如 所示setTimeout。)

为什么 Chrome<embed>在 的那一刻找不到加载的 SVG 文档$(document ).ready(),而 FF 和 IE 可以?

(我不想使用 asetTimeout(7ms)只是为了等待 Chrome 赶上来!!!因为那是……蹩脚的。)

下面的代码简单代码显示了场景: FF 中的RETURNS SVGDocument + Chrome 中的 IE RETURNS NULL(除非调用getSVG()延迟 7 毫秒!!!)。

注意:此代码需要localhost使用 Chrome 在服务器上运行;这是一个单独的 Chrome 问题。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta charset="utf-8">

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

<script>

    getSVG = function () {

        var el = document.getElementById("embedId");

        SVGDoc = el.getSVGDocument();

        console.log(SVGDoc);                           // returns null in Chrome

    }



    $(document).ready(function () {

        getSVG();                        

        //setTimeout("getSVG()", 7);      // this works, showing that Chrome is NOT "ready"

    });


</script>

</head>

<body>

<embed id="embedId" src="man.svg" type="image/svg+xml" width="50" height="50"/> 

</body>

</html>
4

2 回答 2

2

您应该使用 $(window).load() 而不是 $(document).ready() 来等待加载的嵌入、iframe 和图像

于 2012-10-22T14:46:54.240 回答
2

尝试这个

$(window).load(function(){
    console.log($('#embedId')[0].getSVGDocument());
});

另一种可能的解决方案:

$(function(){
    var a = $('#embedId')[0];

    a.addEventListener("load",function(){

        //do stuff with 'a'

    },false);
});
于 2012-10-22T14:47:22.853 回答