[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 メーリングリストの案内