この問題は、少なくとも Android 4.1.2 (Mobile Chrome ではない) に含まれるストック ブラウザーと、ビルド中の cordova ベースの Android アプリの WebView コンポーネントで発生します。
ビューの上部に固定ヘッダーがあり、水平方向にスクロール可能なタブのセットが含まれるページを作成しました。このページには、基本的な DOM とインライン CSS が含まれており、各タブに添付されたクリック ハンドラーが起動しません。
<html>
...
<body>
<div>
<header class="navheader" style="position: fixed; z-index: 1000;">
<h1>....</h1>
<nav style="width: 100%; overflow: scroll; -webkit-overflow-scrolling: touch;">
<div class="tabs">
<div class="tab"><a href="...">...</a></div>
<div class="tab"><a href="...">...</a></div>
<div class="tab"><a href="...">...</a></div>
<div class="tab"><a href="...">...</a></div>
<div class="tab"><a href="...">...</a></div>
<div class="tab"><a href="...">...</a></div>
...
</div>
</nav>
</header>
<section>
...
</section>
</div>
</body>
</html>
jQuery を使用して、次のようないくつかの方法でクリック ハンドラーをアタッチしようとしました。
$('body').on('click', 'header .tab', function(event){ ... });
また
$('.tabs .tab').on('click', function(event){ ... });
「header .tabs a」、「header .tabs .tab a」、「header a」などのセレクターのバリエーションとともに。私も試しました:
$('.tabs .tab a').each(function(i) { this.onclick=function(){ ... }; });
a
各タグに onclick 属性を追加します。
<div class="tab"><a href="..." onclick="alert('hi');">...</a></div>
これらはどれも機能しませんでした。
ただし、このコードを使用すると:
$('body').on('click', function(event){
console.log("Click" + $(event.target).attr('class'));
});
クリック イベントは、「navheader」または「overflow: scroll」が設定された要素の背後にあるものを出力します。各タブ、タブ コンテナー、navelem の z-index を調整しても、これには影響しませんでした。
CSS から 'overflow: scroll' を削除すると問題が軽減され、ハンドラーを登録するためのメソッドのいずれかでイベントが発生します ('-webkit-overflow-scrolling: touch' は効果がないように見えます)。しかし、その後、水平方向にスクロールする機能が明らかに失われます。したがって、スクロール可能な内部コンテンツを持つ要素は、何らかの形でイベント バブリング階層から削除されているようです。また、Mobile Chrome やすべての iOS でも動作します。
誰かが回避策を見つけましたか?
また、webView.getSettings().setJavaScriptEnabled(true);
for WebView で宣言されています。