2

フレームが悪いのは知っています。しかし、私はもう少し彼らに固執する必要があります。私の問題は、「frameset」要素の非標準の「border」属性に起因します。

<frameset border="0">
...
</frameset>

その属性を使用しない場合、ブラウザは各フレームの間にギャップを置きます。属性を使用すると、HTMLバリデーターは「サポートされていない属性」に関するエラーをスローします。

「それを使ってバリデーターを無視する」と言っているのを聞きましたが、それで問題ありません。私はバリデーターの警告を1つ付けて生きることができると思いますが、ブラウザーもそれについてあまり心配していないようです:)

私の質問は主にHTMLのトリックについてです。境界線を0に設定し、ブラウザとの互換性を維持するにはどうすればよいですか?これは、将来の同様の問題の演習と考えてください。たとえば、私は試しました:

<frameset onload="this.border='0'">

そしてそれはうまくいきませんでした。

内側のフレームでスタイルシートを使用して「border:0; margin:0; padding:0」を設定しようとしましたが、どちらも機能しませんでした。ギャップは未知のソースから来ているようです。

私は次のようにJavascriptで書くことを考えました:

document.write('<frameset border="0">');

しかし、とにかく検証されないだろうという予感があります。

別の解決策を考えられますか?


うまくいかなかった他の解決策:

  • @Donut:「frame」または「frameset」要素のいずれかの「frameborder」属性
  • @kangax:frameSetObj.setAttribute('border'、0);
4

2 に答える 2

2

私のテストによると、これらは機能するはずです:

Opera(10)の場合:

frameSetObj.setAttribute("framespacing", "0");

IE8の場合:

frameSetObj.setAttribute("framespacing", "0");
//set rows and cols attributes again if the frameset already had them.
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);

FireFox3.5およびChrome3の場合

frameSetObj.setAttribute("frameborder", "0");
//same idea as IE8
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);

要約すると、このコードはすべてのブラウザで機能するはずです。

frameSetObj.setAttribute("framespacing", "0");
frameSetObj.setAttribute("frameborder", "0");
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);
于 2009-10-24T10:06:56.370 に答える
2

タグではなくタグでframeborder属性を使用します。HTML 仕様によると、タグに定義された(または) 属性はありません。実際、フレームに関する W3C のページはすべてチェックする価値があります。そこにある例は、見てみるのに役立つかもしれません。また、正しい を使用していることを確認する必要があります。例では:frameborderframesetborderframeborderframeset
DOCTYPE

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
于 2009-09-15T18:17:28.307 に答える