Mobile Safari、Androidブラウザ、Firefox for Android( "Fennec")で見られる効果がバグなのか、予想される動作なのかを調べようとしています。基本的に、問題は、要素が最初にユーザーによってタップされていなく<input>
ても、特定のシナリオで要素がキーボードフォーカスを受け取ることができるということです。<input>
再現可能なテストケースは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, user-scalable=no">
<style>
#screenCover {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.3);
z-index: 1;
}
#newItemInput {
position: absolute;
width: 200px;
height: 20px;
}
</style>
</head>
<body>
<div id="screenCover"></div>
<input id="newItemInput" type="text">
<script type="text/javascript" language="JavaScript">
var screenCoverEl = document.getElementById("screenCover"),
newItemInputEl = document.getElementById("newItemInput");
newItemInputEl.value = String(navigator.userAgent);
screenCoverEl.addEventListener("touchend", function (event) {
// Move the <input> element in the way.
newItemInputEl.style.top = (event.changedTouches[0].clientY - 10) + "px";
newItemInputEl.style.left = (event.changedTouches[0].clientX - 10) + "px";
// Hide the screen cover. Note that the screen cover was the original target of the tap.
screenCoverEl.style.display = "none";
}, false);
newItemInputEl.addEventListener("click", function (event) {
this.setSelectionRange(0, this.value.length);
}, false);
</script>
</body>
</html>
またはモバイルブラウザで直接:
http://fiddle.jshell.net/f7TKc/2/show/
この例では、画面カバーがドキュメントの上にありますが、touchend
では、画面カバーが非表示になり<input>
、ユーザーが画面カバーをタップした場所に要素が移動します。Mobile Safari、Android Browser、およびFennec 13.0b1では、<input>
要素は不可解にキーボードフォーカスを受け取ります。
エミュレーター内でクラッシュするため、新しいバージョンのFennecでこれをテストすることはできません。
これはバグですか、それとも予想される動作ですか?