我试图弄清楚在 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 浏览器和 Fennec 13.0b1 中,该<input>
元素莫名其妙地获得了键盘焦点。
我无法在较新版本的 Fennec 中对此进行测试,因为它在模拟器中崩溃。
这是错误还是预期行为?