检测浏览器是否支持contentEditable?
有这个问题 ,但发布的解决方案是浏览器嗅探,我试图避免。
我需要让我的网站与iPad以及更新的Androids兼容。 我一直在为我的WYSIWYG编辑器使用旧版本的FCKEditor(现在的CK编辑器),但是这不适用于移动设备,所以我想将它换成简单的textarea,如markdown,如果不支持的话。
据说它不起作用,因为移动设备往往不支持此contentEditable
属性,这意味着单击它时屏幕键盘不会弹出。
如何检测浏览器是否支持contentEditable
? 有人建议我用mydiv.contentElement === undefined
或类似的东西检查有问题的div,但div(如果它使用的是)都内置在FCK编辑器中并埋在iframe中。
是否有其他方法可以检测浏览器是否支持contentEditable
?
试过这个:
var contentEditableSupport = typeof $('')[0].contentEditable !== 'undefined';
在我的iPad上说“真实”……我认为不应该这样。
编辑:它返回“字符串”,因为所有属性都是字符串….它只是读取属性。 我该怎么办呢?
这是我使用的测试,也用于Modernizr 。 它会在iOS 4(可能更早)中给出误报,但不幸的是在这些环境中无法检测到。
var contentEditableSupport = "contentEditable" in document.documentElement;
您可以创建一个匿名的可编辑div,检查contentEditable,然后删除div。
我能够通过检查contentEditable
属性的默认值而不是presence或类型来实现此目的。 W3规范指出contentEditable
缺省值默认值是“inherit”,但在旧版浏览器(例如Android / Gingerbread)中,默认值为“false”。 感谢对OP的评论的愚蠢,这使我指出了正确的方向!
这个测试对我有用:
var contentEditableSupport = $('')[0].contentEditable == 'inherit';
检查execCommand
if (document.execCommand) { ... browser supports contentEditable } else { ... browser doesn't support contentEditable }
检查元素是否有任何出口退出。 你可以这样做
var element = document.createElement('__ELEMENT__'); if ('__PROPERTY__' in element ) { // property supported in the browser }
要么
if ('__PROPERTY__' in document.createElement('__ELEMENT__') ) { // property supported in the browser }
以下链接包含所有内容。
Interesting Posts
在contenteditable元素中插入链接
HTML修改后无法恢复选择,即使它是相同的HTML
contentEditable字段,用于在数据库输入时维护换行符
在与jQuery UI对话框和文本输入交互时保留满意的文本选择
如果我对一个可疑项目进行“jquery sortable”,那么我就无法将鼠标聚焦在任何可疑文本中的任何地方了
粘贴结束标记,而不会在contenteditable中生成开始p标记
修改contenteditable div中的文本而不重置插入符(光标)位置
保存和恢复contentEditable div的插入位置
ContentEditable div – 第一个’x’字符后面的所有HTML
在javascript中获取插入位置之前的最后一个字符