bobince 的答案在大多数情况下都有效,但正如前面所说,您将需要用户代理嗅探以排除不显示软件键盘的 iOS 和 Android 版本。我目前正在使用这样的东西:
function isContentEditable() {
var canEditContent = 'contentEditable' in document.body;
if (canEditContent) {
var webkit = navigator.userAgent.match(/(?:iPad|iPhone|Android).* AppleWebKit\/([^ ]+)/);
if (webkit && parseInt(webkit[1]) < 534) {
return false;
}
}
return canEditContent;
}
这应该会阻止较旧的 iOS 和 Android 设备返回 true。但它仍然存在一个问题:物理键盘。例如,如果设备运行 Android 2.3 但有物理键盘,则用户将能够使用 contentEditable 但此函数将返回 false。物理键盘虽然很少见。
更常见的是,在某些设备上,用户可以通过按住菜单按钮来调出屏幕键盘。显然,这并不是您真正应该期望您的用户知道的事情。
您可以通过某种方式让用户手动覆盖检测脚本的嗅探部分,从而稍微缓解这些问题。您可以通过向“if (canEditContent)”添加覆盖检查来在 isContentEditable 函数中实现这一点。但是,为此实现 UI 可能会带来更多挑战;)。