4

シングルページ アプリの場合: 各 DOM ノードが単一の (ブラウザー内の) ドメイン オブジェクトへの参照を持つようにします。次のような直接参照を保存しても問題ありませんか。

var myDomainObject = ...;
var DOMNode = document.getElementById("myId");
DOMNode.domain_object = myDomainObject;

これは安全で、再現可能ですか? ブラウザーは、アドオンの JavaScript プロパティを使用して不思議なことを行うことができますか?

ありがとう。

4

3 に答える 3

2

経験的な観点から: 私はデータを問題なくノードに直接接続しましたが、問題はありませんでした。仕様の観点から、そうすることは必ずしも推奨されるわけではありませんが、カスタム属性が他のものと競合しない範囲で安全であるというのが私の解釈です。

Common Infrastructure - Extensibilityでは、作成者 (つまりあなた) への推奨事項は、 [data-*] 属性のみを使用することです。

作成者は、data-*="" 属性を使用して処理するインライン クライアント側スクリプトまたはサーバー側サイト全体のスクリプトのデータを含めることができます。これらはブラウザーによって決して触れられないことが保証されており、スクリプトが検索して処理できる HTML 要素にデータを含めることをスクリプトに許可します。

また、有効なユーザー エージェントの要件は、認識できないものを DOM に残すことです。

ユーザー エージェントは、理解できない要素と属性を意味的に中立なものとして扱わなければなりません。それらを DOM に残し (DOM プロセッサの場合)、CSS に従ってスタイル設定します (CSS プロセッサの場合)。ただし、それらから意味を推測することはありません。

したがって、私の提案は、コンフリクトを回避するという W3C の目的と同じ方向に沿って、DOM 要素を参照するオブジェクトを作成することです。しかし、奇妙なものを DOM にタグ付けする「必要がある」場合は、ユーザー エージェントがそこに残す必要があるので安心してください。しかし、どうしても必要な場合は、これらのdata-*属性を使用するのが賢明かもしれません!

(私は個人的にそれらを使用せず、オブジェクトと値をその時点で最も便利なものに平手打ちする傾向があります。しかし、約 15 年間のハッキングと、ユーザー エージェントの非準拠に対する「機能検出」にうんざりしている可能性があります。今でも、IEがdata-*標準をサポートしているとは思いません... )

于 2013-05-28T03:58:55.107 に答える