[mayaa-user:921] HTML5でaタグがブロック要素を含む時、不可解な挙動をします

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2011年 3月 26日 (土) 23:18:38 JST


いつもお世話になっております。
石上です。

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)を添付します。

よろしくお願い致します。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/mayaa-user/attachments/20110326/cda6d41a/attachment.html>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/mayaa-user/attachments/20110326/cda6d41a/attachment-0001.html>


mayaa-user メーリングリストの案内