ええと、今夜は本当に退屈で、学業以外のことをしたかったので、多くの仕様とフォーラムを掘り下げました.
HTML4 仕様には SVG についての言及がないようで、行き止まりになっています。HTML5 Spec Working Draftは、data
プラグインを呼び出してコンテンツをロードするために使用できることを示しています。HTML5 Spec Editor's Draft ではSVGについて言及し ており、 SVG は埋め込みコンテンツのカテゴリに分類されることを示しています。
Editor's DraftはWorking Draft<object>
で定義されているように要素に追加の詳細を追加するため、要素をロードする動作は受け入れられた標準ではないと言えます。<object>
(間違っていたら誰か訂正してください。)
とにかく、<object>
仕様では、ブラウザーが MIME タイプなどによってオブジェクトを解釈する方法に関するすべての通常の技術用語は別として... この質問に関連する部分を見つけます。
4.6: ロードが失敗した場合(HTTP 404 エラーが発生した場合、DNS エラーが発生した場合など)、要素でerrorという名前の単純なイベントを起動し、一連のステップ全体の最後のステップにジャンプします (フォールバック)。
...
10.: リソースが完全に読み込まれたら、要素でloadという名前の単純なイベントを発生させるタスクをキューに入れます。
(単純なイベントは単に、イベントがバブリングしないことを意味し (そのため、親要素でそれをリッスンすることはできません)、キャンセルできず、Event
インターフェイスを使用します)
したがって、これを見て<object>
、DOM から要素を選択した場合はonload
andonerror
イベントが必要であると考えましたobject.addEventListener
。SVGおよびの Mozilla Developer Network ドキュメントを見ると<object>
、JavaScript ドキュメントの多くが不完全です。残念。
JSFiddle と Chrome Dev Tools と Firefox Web Console をいじってみたところ、どちらもonload
とをサポートしていることがわかりましたonerror
。
試験結果
Google Chrome (18.0.1025.165) および Firefox (12.0)
サポート:
addEventListener('load', function(){})
obj.onload = function(){};
サポートしていません (イベントが発生しないようです) :
addEventListener('error', function(){})
obj.onerror = function(){}
fiddleからわかるように、Chrome でload
イベントを使用すると無限ループが発生します。これを行うことは想定されていません(編集者のドラフトによると):
上記のアルゴリズムは、CSS プロパティ ('display'、'overflow'、'visibility' を含む) とは無関係です。たとえば、要素が「display:none」CSS スタイルで非表示になっている場合でも実行され、要素の可視性が変更されても再度実行されません。
誰かがすでにバグを報告しているようです。そのバグを確認していただけると、Chrome デベロッパー チームの助けになります。
TL;DR
オブジェクトをロードする動作はまだ標準として認められていませんが、Chromium プロジェクトでバグを確認できます。@Hello71 が提案したように、要素を DOM から削除して再度追加することもできますが、動作させることができませんでした。