0

XHTML 1.0 Strict として検証するように W3C の検証ツールを使用してサイトを実行していますが、(少なくとも私の経験では) 特に厄介な検証エラーが発生しました。外部サイトに含めるための独自の API とコードを提供するさまざまなサービスの特定のバッジをサイトに含めています。これらのバッジは、(ほとんどの場合) javascript を使用して、子を必要とするマークアップに挿入する要素を埋めます。これは、最終的には完全に有効なマークアップが生成されることを意味しますが、バリデーターには、不完全な親子タグしか表示されず、エラーがスローされます。

注意点として、バッジが検証されていないサービスに不平を言うことができることを理解しています. これがなければ、誰かがこのようなバッジを含めながらコードを検証したと思います。それが私が興味を持っていることです。「バッジについて Flickr に苦情を言う」などの回答はあまり役に立ちません。

追加の警告: マークアップは可能な限りセマンティックのままにすることをお勧めします。IE 有効にするために空の li タグまたは tr-td ペアを追加することは、必要かもしれませんが、望ましくない解決策です。それが検証する唯一の方法である場合は、まあ、セマンティックマークアップに答えてください。

例として:

<div id="twitter_div">
<h2><a href="http://twitter.com/stopsineman">@Twitter</a></h2>
<ul id="twitter_update_list">
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=twitterCallback2&amp;count=1"></script>
</ul>
</div>

JavaScript をラップする ul タグに注目してください。これは最終的にスクリプトを介して lis で埋められますが、バリデータには未入力の ul しか見えません。

前もって感謝します!

4

6 に答える 6

7

次のフラグメントは有効な XHTML であり、機能します。

<div id="twitter_div">
    <h2 class="twitter-title"><a href="http://twitter.com/stopsineman" title="Tim's Twitter Page.">Twitter Updates</a></h2>
    <div id="myDiv" />
</div> 

<script type="text/javascript">
    var placeHolderNode = document.getElementById("myDiv");
    var parentNode = placeHolderNode.parentNode;
    var insertedNode = document.createElement("ul");
    insertedNode .setAttribute("id", "twitter_update_list");
    parentNode.insertBefore( insertedNode, placeHolderNode);
    parentNode.remove(placeHolderNode);
</script>
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=twitterCallback2&amp;count=5"></script>
于 2008-09-29T19:20:56.577 に答える
2

ソリューションは、バッジごとに異なる場合があります。Twitter の場合、独自のコールバック関数を作成するだけです。バッジ コードに基づく例を次に示します。

<div id="twitter_div">
  <h2><a href="http://twitter.com/stopsineman">@Twitter</a></h2>
  <div id="twitter_update_list"></div>
</div>

<script type="text/javascript">
function updateTwitterCallback(obj)
{
  var twitters = obj;
  var statusHTML = "";
  var username = "";
  for (var i = 0; i < twitters.length; i++)
  {
    username = twitters[i].user.screen_name;
    statusHTML += ('<li><span>' + twitters[i].text + '</span> <a style="font-size:85%" href="http://twitter.com/' + username + '/statuses/' + twitters[i].id + '">' + relative_time(twitters[i].created_at) + '</a></li>');
  }
  document.getElementById('twitter_update_list').innerHTML = '<ul>' + statusHTML + '</ul>';
}
</script>
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=updateTwitterCallback&amp;count=1"></script>
于 2008-09-29T19:27:05.093 に答える
2

おそらく、javascript を使用して最初のバッジ HTML を記述できますか? バッジ コードをドキュメントに挿入するために JavaScript を使用できる場合にのみ、バッジ コードをドキュメントに挿入したいと思うでしょう。

さまざまなバッジの JavaScript の前に、ドキュメントの書き込みが確実に行われるようにする必要があります。

無効なコードを含むページへの HTML / リンクの具体例を教えてください。

于 2008-09-29T18:44:20.563 に答える
1

<ul> タグに "display:none" を指定して <li> を挿入します。

<ul id="twitter_update_list"><li style="display:none;">A</li></ul>

<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/01241.json?callback=twitterCallback2&amp;count=1"></script>

これはスクリプトに影響を与えず、この場合は機能します。「望ましくない解決策」ではないと思います:)

于 2010-06-13T00:22:29.140 に答える
0

これは、このトピックに関する最も一般的な意見ではないかもしれませんが...

100% の検証について心配する必要はありません。それほど大したことではありません。

検証のポイントは、マークアップを可能な限り標準にすることです。なんで?仕様に準拠していないマークアップ (検証しないマークアップなど) を指定されたブラウザーは、独自のエラー チェックを行って修正し、意図したとおりにページをユーザーに表示するためです。ブラウザーのエラー チェックの品質はさまざまです。ヤダヤダヤダ、有効なマークアップを使用した方がよいでしょう... しかし、検証が失敗する原因はコードではありません。これらのバッジを作成した人は、おそらく複数のブラウザーでテストしたでしょう (もちろん、あなたも同じことをするべきです)。

要するに、検証に対する賞はありません:)

于 2008-09-29T18:56:46.307 に答える
0

ある時点で、ページは有効になりますよね? それが本当に検証できる唯一の時間です。

大量の DOM スクリプトを使用して構築されている場合、重要なページが構築中のすべての時点で有効であり続けるかどうかはわかりません。

于 2008-09-29T18:50:03.797 に答える