2

object以下のコードのようなタグ内にロードされたシンプルな SVG があります。Safari では、loadブラウザを開いた後に初めてページをロードしたときに、イベントが 1 回だけ発生します。それ以外の場合はそうではありません。イベントを使用しloadて GSAP でいくつかのアニメーションを初期化しているため、DOM ノードを選択する前に、SVG が完全に読み込まれるタイミングを知る必要があります。setTimeoutイベントにアタッチする代わりに を使用することで、うまくいくと思われる簡単な回避策がありますが、遅いネットワークobjectでは指定された時間内に をロードできないため、少し厄介なようです。このイベントが標準化されていないことは承知していますが、この問題に直面したのは私が初めてではないと思います。どのように解決しますか?

var myElement = document.getElementById('my-element').getElementsByTagName('object')[0];

myElement.addEventListener('load', function () {
    var svgDocument = this.contentDocument;
    var myNode = svgDocument.getElementById('my-node');

    ...
}
4

2 に答える 2

4

問題は、データがキャッシュされると、ハンドラーをアタッチする前にload イベントが発生することです。

あなたが試すことができるのは、イベントを添付したらデータ属性をリセットすることです:

object.addEventListener('load', onload_handler);
// reset the data attribte so the load event fires again if it was cached
object.data = object.data;
于 2016-01-08T14:06:41.690 に答える