[mayaa-user:922] Re: HTML5でaタグがブロック要素を含む時、不可解な挙動をします
suga
[E-MAIL ADDRESS DELETED]
2011年 3月 27日 (日) 09:07:46 JST
suga です。
HTML5 以前では a タグが inline 要素であるため、NekoHTML が構造を修正することが理由です。
# div が修正されないのはわかりませんが。
ひとまずタグのバランス修正機能をオフにできるようにします。
HTML5 でのみ対応可能かどうか調査してみて、可能であればこの変更は元に戻すかもしれません。
org.seasar.mayaa.provider.ServiceProvider ファイルで TemplateBuilderImpl に
balanceTag という
パラメータを追加しました。デフォルトは true で、これを false にすることで一切のバランス修正をしなくなります。
この場合、省略可能な閉じタグも必ず正しく記述してください。
https://www.seasar.org/maven/maven2-snapshot/org/seasar/mayaa/mayaa/1.1.29-SNAPSHOT/mayaa-1.1.29-20110326.235810-2.jar
NekoHTML のバージョンを上げるには Xerces の変更に合わせてカスタマイズ方法を変更しなければ
ならないため、ちょっと時間がかかります。
changelog を見る限りは HTML5 に対応してはいないようなので、おそらくこの問題の解決にはならない
と考えています。
--
suga ( [E-MAIL ADDRESS DELETED] )
2011/3/26 Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。
> 石上です。
>
> Mayaaを使用して、HTML5ベースのスマートフォンサイトを作成しております。
> その際不可解な現象が発生したため、報告させていただきます。
>
> HTML5からは、aタグがブロック要素を含むことができるようになりました。
> http://www.w3.org/TR/2011/WD-html5-diff-20110113/
>> The a element without an href attribute now represents a placeholder for where a link otherwise might have been placed. It can also contain flow content rather than being restricted to phrase content.
>
> そこで、下記のようなコードをテンプレートに書いたのですが、
> <a href="javascript:alert('hello');">
> <p>aaa</p>
> <p>aaa</p>
> </a>
> 出力結果が以下のようになってしまって正しく動作しません。
> <a href="javascript:alert('hello');">
> </a><p><a href="javascript:alert('hello');">aaa</a></p>
> <p>aaa</p>
>
> 一方、以下のようにdiv, for, blockquoteタグで囲むと、正常に出力されます。
> <a href="javascript:alert('hello');">
> <div>
> <p>aaa</p>
> <p>aaa</p>
> </div>
> </a>
>
> しかし、section等HTML5の新しいタグでは期待通りに動作しません。
> <a href="javascript:alert('hello');">
> <section>
> <p>aaa</p>
> <p>aaa</p>
> </section>
> </a>
> これは以下のようになります。
> <a href="javascript:alert('hello');">
> </a><section><a href="javascript:alert('hello');">
> </a><p><a href="javascript:alert('hello');">aaa</a></p>
> <p>aaa</p>
> </section>
>
> この現象は、Webサイトで配布されているblankプロジェクトでも再現します。
> 上記テストコードでは、mayaaファイルは作成しておらず、
> テンプレートがほぼそのまま出力されることを期待しています。
>
> Mayaaのソースを読ませて頂いたのですが、原因が分かりませんでした。
>
> もしかしたら、依存する別ライブラリが原因かもしれないと勝手に予想し、
> nekohtmlのバージョンを上げてみたのですが、
> mayaaにバンドルされている0.9.5の次の、1.9.6ではコンパイルは通りましたが上記挙動は変化せず、
> 1.9.6.1から、最新の1.9.1.14までは、コンパイルが通りませんでした:
> TemplateParserConfiguration.javaの
> 57: fDocumentScanner = scanner;
> というところでコンパイルエラーになってしまいます。
>
> 参考までにテストに使用したテンプレートのHTML(index.html)と、
> 出力して得られたHTML(output.html)を添付します。
>
> よろしくお願い致します。
>
> _______________________________________________
> mayaa-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
mayaa-user メーリングリストの案内