3

FFおよびIEでは、SVG(SVG)ドキュメントは$(document ).ready()が呼び出されたときに取得されます。

Chromeでは、が呼び出されたgetSVGDocumentときに代わりにnullを返します。$(document ).ready()(で示されているように、約7ms後に検出されるようですがsetTimeout。)

Chromeがロードされた<embed>SVGドキュメントを現時点で検出しないのに、 $(document ).ready()FFとIEは検出するのはなぜですか?

setTimeout(7ms)( Chromeが追いつくのを待つためだけに使用する必要はありません!!!それは...ラメだからです。)

以下のコードの単純なコードは、シナリオを示しています。FF +IEのRETURNSSVGDocumentChromeのRETURNSNULL(への呼び出しが7ms遅れない限りgetSVG()!!!)。

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

ロードされた埋め込み、iframe、画像を待つには、$(document).ready()の代わりに$(window).load()を使用する必要があります

于 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 に答える