[转]BX9054: 各浏览器对 document.execCommand 方法的首参数可选值范围存在差异
标准参考
无。
问题描述
execCommand 方法通常用于控制可编辑的 IFRAME 内容,制作富文本编辑器。 但他现在为止还是非标准的,方法的首参数 Commmands 的可选值由各个浏览器厂商制定,支持程度并不统一。
造成的影响
使用仅有某个浏览器支持的 Commmands 参数会造成其他浏览器运行时脚本出错,从而影响其他浏览器内正常脚本继续执行。
受影响的浏览器
| 所有浏览器 |
|---|
问题分析
document.execCommand 方法提供了对浏览器内置命令调用的接口,他暂时不属于任何现行规范定义范围,由浏览器各自实现。
在现有 HTML5 规范草案中,已经加入对 execCommand 方法的描述,他被安置在 HTMLDocument 接口定义中。该方法执行参数:document.execCommand(commandId [, showUI [, value ] ] )
通常 document.execCommand 方法可以使脚本程序执行在当前选择或在当前插入符位置进行一系列操作。一般来说,这些命令主要都是是用来实现富文本编辑器的核心功能。
execCommand 方法的参数 commandId 可选值以及作用,在 HTML5 规范草案中有部分描述,并定义了核心的可选参数列表,以及最后说明的自定义其他参数 vendorID-customCommandID 可由厂商自行扩展。详细内容可以参考 :7.11 Editing APIs
另外在各浏览器对应的开发者站点 msdn.microsoft.com (MSDN)、developer.mozilla.org (Mozilla Developer Network)、developer.apple.com (Apple Developer)、dev.opera.com (Opera Developer Community) 中,MSDN 与 Mozilla Developer Network 均有详细的 execCommand 方法的首参数可选值描述,Opera Developer Community 有简要说明, Apple Developer 无任何可查资料。
其中详细内容可参考开发者站点:
MSDN:execCommand Method、Command Identifiers。
MDC:Rich-Text Editing in Mozilla。
dev.opera.com :Rich HTML editing in the browser: part 1、Rich HTML editing in the browser: part 2。
这里需要注意,由于 HTML5 规范草案与各浏览器具体开发文档中对,execCommand 方法的首形参数的形参名称规定不相同,为了避免混淆,本文以后均采用 sCommands 来表示。
MSDN MDC HTML5 草案中提出的全部 sCommands 参数,如下表:
| MSDN | MDC | HTML5 草案 2 |
|---|---|---|
| 2D-Position | ||
| AbsolutePosition | ||
| BackColor | backColor | |
| BlockDirLTR1 | ||
| BlockDirRTL1 | ||
| Bold | bold | bold |
| BrowseMode1 | ||
| ClearAuthenticationCache | ||
| contentReadOnly | ||
| Copy | copy | |
| CreateBookmark | ||
| CreateLink | createLink | createLink |
| Cut | cut | |
| decreaseFontSize | ||
| Delete | delete | delete |
| DirLTR1 | ||
| DirRTL1 | ||
| EditMode1 | ||
| FontName | fontName | |
| FontSize | fontSize | |
| ForeColor | foreColor | |
| FormatBlock | formatBlock | formatBlock |
| enableInlineTableEditing | ||
| enableObjectResizing | ||
| forwardDelete | ||
| heading | ||
| hiliteColor | ||
| increaseFontSize | ||
| Indent | indent | |
| InlineDirLTR1 | ||
| InlineDirRTL1 | ||
| InsertButton | ||
| InsertFieldset | ||
| InsertIFrame | ||
| InsertInputButton | ||
| InsertInputCheckbox | ||
| InsertInputFileUpload | ||
| InsertInputHidden | ||
| InsertInputImage | ||
| InsertInputPassword | ||
| InsertInputRadio | ||
| InsertInputReset | ||
| InsertInputSubmit | ||
| InsertInputText | ||
| InsertMarquee | ||
| insertBrOnReturn | ||
| InsertHorizontalRule | insertHorizontalRule | |
| InsertImage | insertImage | insertImage |
| insertHTML | insertHTML | |
| insertLineBreak | ||
| insertOrderedList | insertOrderedList | |
| InsertUnorderedList | insertUnorderedList | insertUnorderedList |
| InsertParagraph | insertParagraph | insertParagraph |
| InsertSelectDropdown | ||
| InsertSelectListbox | ||
| InsertTextArea | ||
| insertText | ||
| Italic | italic | italic |
| JustifyCenter | justifyCenter | |
| JustifyLeft | justifyLeft | |
| JustifyRight | justifyRight | |
| JustifyFull1 | ||
| JustifyNone1 | ||
| LiveResize | ||
| MultipleSelection | ||
| Open1 | ||
| OverWrite | ||
| Outdent | outdent | |
| Paste | paste | |
| PlayImage1 | ||
| Redo1 | redo | redo |
| RemoveFormat | removeFormat | |
| Refresh | ||
| RemoveParaFormat1 | ||
| SelectAll | selectAll | selectAll |
| SaveAs | ||
| SizeToControl1 | ||
| SizeToControlHeight1 | ||
| SizeToControlWidth1 | ||
| Stop1 | ||
| StopImage1 | ||
| StrikeThrough1 | strikeThrough | |
| Subscript1 | subscript | subscript |
| Superscript1 | superscript | superscript |
| UnBookmark | ||
| Underline | underline | |
| Undo | undo | undo |
| Unlink | unlink | unlink |
| useCSS | ||
| Unselect | unselect | |
| styleWithCSS |
【注1】:MSDN 中标注为不支持的 sCommands 参数。
【注2】:仅为文章写作时期 HTML5 草案中存在的 sCommands 参数,不含说明中由厂商具体指定部分。
将所有 sCommands 参数汇集起来,构建测试用例,检查他们被支持程度。由于本例代码较多,故不在文中贴出,您可以直接观看下方的 测试页面。
根据测试页,得出实际 sCommands 可选参数支持度对照表:
| sCommands | IE6 | IE7 | IE8 | Firefox | Chrome | Safari | Opera |
|---|---|---|---|---|---|---|---|
| 2D-Position | Y | Y | Y | N | N | N | N |
| absolutePosition | Y | Y | Y | N | N | N | N |
| backColor | Y | Y | Y | Y | Y | Y | Y |
| blockDirLTR | Y | Y | Y | N | N | N | N |
| blockDirRTL | Y | Y | Y | N | N | N | N |
| bold | Y | Y | Y | Y | Y | Y | Y |
| browseMode | Y | Y | Y | N | N | N | N |
| clearAuthenticationCache | Y | Y | Y | N | N | N | N |
| contentReadOnly | N | N | N | Y | N | N | Y |
| copy | Y | Y | Y | N | N | N | N |
| createBookmark | Y | Y | Y | N | N | N | N |
| createLink | Y | Y | Y | Y | Y | Y | Y |
| cut | Y | Y | Y | N | N | N | N |
| decreaseFontSize | N | N | N | Y | N | N | Y |
| delete | Y | Y | Y | Y | Y | Y | Y |
| dirLTR | Y | Y | Y | N | N | N | N |
| dirRTL | Y | Y | Y | N | N | N | N |
| editMode | Y | Y | Y | N | N | N | N |
| fontName | Y | Y | Y | Y | Y | Y | Y |
| fontSize | Y | Y | Y | Y | Y | Y | Y |
| foreColor | Y | Y | Y | Y | Y | Y | Y |
| formatBlock1 | Y | Y | Y | Y | Y | Y | Y |
| enableInlineTableEditing | N | N | N | Y | N | N | N |
| enableObjectResizing | N | N | N | Y | N | N | N |
| forwardDelete | N | N | N | N | Y | Y | N |
| heading | N | N | N | Y | N | N | N |
| increaseFontSize | N | N | N | Y | N | N | Y |
| indent | Y | Y | Y | Y | Y | Y | Y |
| inlineDirLTR | N | N | N | N | N | N | N |
| inlineDirRTL | N | N | N | N | N | N | N |
| insertButton | Y | Y | Y | N | N | N | N |
| insertFieldset | Y | Y | Y | N | N | N | N |
| insertIFrame | Y | Y | Y | N | N | N | N |
| insertInputButton | Y | Y | Y | N | N | N | N |
| insertInputCheckbox | Y | Y | Y | N | N | N | N |
| insertInputFileUpload | Y | Y | Y | N | N | N | N |
| insertInputHidden | Y | Y | Y | N | N | N | N |
| insertInputImage | Y | Y | Y | N | N | N | N |
| insertInputPassword | Y | Y | Y | N | N | N | N |
| insertInputRadio | Y | Y | Y | N | N | N | N |
| insertInputReset | Y | Y | Y | N | N | N | N |
| insertInputSubmit | Y | Y | Y | N | N | N | N |
| insertInputText | Y | Y | Y | N | N | N | N |
| insertMarquee | Y | Y | Y | N | N | N | N |
| insertBrOnReturn | N | N | N | Y | N | N | N |
| insertHorizontalRule | Y | Y | Y | Y | Y | Y | Y |
| insertImage | Y | Y | Y | Y | Y | Y | Y |
| insertHTML | N | N | N | Y | Y | Y | Y |
| insertLineBreak | N | N | N | N | Y | Y | N |
| insertOrderedList | Y | Y | Y | Y | Y | Y | Y |
| insertUnorderedList | Y | Y | Y | Y | Y | Y | Y |
| insertParagraph | Y | Y | Y | Y | Y | Y | Y |
| insertSelectDropdown | Y | Y | Y | N | N | N | N |
| insertSelectListbox | Y | Y | Y | N | N | N | N |
| insertTextArea | Y | Y | Y | N | N | N | N |
| insertText | N | N | N | N | Y | Y | N |
| italic | Y | Y | Y | Y | Y | Y | Y |
| justifyCenter | Y | Y | Y | Y | Y | Y | Y |
| justifyLeft | Y | Y | Y | Y | Y | Y | Y |
| justifyRight | Y | Y | Y | Y | Y | Y | Y |
| justifyFull | Y | Y | Y | Y | Y | Y | Y |
| justifyNone | Y | Y | Y | N | Y | Y | N |
| liveResize | Y | Y | Y | N | N | N | N |
| multipleSelection1 | Y | Y | Y | N | N | N | N |
| open | Y | Y | Y | N | N | N | N |
| overWrite | Y | Y | Y | N | N | N | N |
| outdent | Y | Y | Y | Y | Y | Y | Y |
| paste | Y | Y | Y | N | N | N | N |
| playImage | N | N | N | N | N | N | N |
| Y | Y | Y | N | Y | Y | N | |
| redo | Y | Y | Y | Y | N | N | Y |
| removeFormat | Y | Y | Y | Y | Y | Y | Y |
| refresh | Y | Y | Y | N | N | N | N |
| removeParaFormat | N | N | N | N | N | N | N |
| selectAll | Y | Y | Y | Y | Y | Y | Y |
| saveAs | Y | Y | Y | N | N | N | N |
| sizeToControl | N | N | N | N | N | N | N |
| sizeToControlHeight | N | N | N | N | N | N | N |
| sizeToControlWidth | Y | N | Y | N | N | N | N |
| stop | Y | Y | Y | N | N | N | N |
| stopImage | N | N | N | N | N | N | N |
| strikeThrough | Y | Y | Y | Y | Y | Y | Y |
| subscript | Y | Y | Y | Y | Y | Y | Y |
| superscript | Y | Y | Y | Y | Y | Y | Y |
| unBookmark | Y | Y | Y | N | N | N | N |
| underline | Y | Y | Y | Y | Y | Y | Y |
| undo | Y | Y | Y | Y | N | N | Y |
| unlink | Y | Y | Y | Y | Y | Y | Y |
| useCSS | N | N | N | Y | N | N | Y |
| hiliteColor | N | N | N | Y | Y | Y | Y |
| unselect | Y | Y | Y | N | Y | Y | Y |
| styleWithCSS | N | N | N | Y | N | N | Y |
【注】:formatBlock 指令可接收的 vValue 值不同,IE 中需要 vValue 值为目标块标记名,而其他浏览器可以接收空字符串。
multipleSelection 指令在 Windows XP sp3 中可构建出多选列表,Windows 7 中指令只会返回 TRUE,对代码结构不会有任何改变。
解决方案
在调用 execCommand 方法时建议仅从 "backColor" "bold" "createLink" "delete" "fontSize" "foreColor" "formatBlock" "indent" "insertHorizontalRule" "insertImage" "insertOrderedList" "insertUnorderedList" "insertParagraph" "italic" "justifyCenter" "justifyLeft" "justifyRight" "justifyFull" "outdent" "removeFormat" "selectAll" "strikeThrough" "subscript" "superscript" "underline" "unlink" 参数中选择其一作为首参数传入,他们均被所有浏览器支持。
参见
知识库
相关问题
测试环境
| 操作系统版本: | Windows 7 Ultimate build 7600 |
|---|---|
| 浏览器版本: | IE6 IE7 IE8 Firefox 3.6.10 Chrome 8.0.552.0 dev Safari 5.0.2 Opera 10.63 |
| 测试页面: | execCommand_sCommands_Parameters.html |
| 本文更新时间: | 2010-10-15 |
关键字
document execCommand Commands Identifiers HTML5 MSDN MDC
原文:
http://w3help.org/zh-cn/causes/BX9054 (需要FQ)
[转]BX9054: 各浏览器对 document.execCommand 方法的首参数可选值范围存在差异的更多相关文章
- document.execCommand 常用的方法
execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用如下格式: document.execCommand(sCommand[,交互方式, 动态参数]) , ...
- JS execCommand 方法
document.execCommand()方法处理Html数据时常用语法格式如下: 复制内容到剪贴板 代码: document.execCommand(sCommand[,交互方式, 动态参数]) ...
- Javascript中document.execCommand()的用法
document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数]) 其中:sCommand为指令 ...
- javascript的document.execCommand(转)
document.execCommand()方法处理html数据时常用语法格式如下: 代码: document.execCommand(sCommand[,交互方式, 动态参数]) 其 中:sComm ...
- document.execCommand()函数可用参数解析
隐藏在暗处的方法-execCommand() 关键字: javascript document document.execCommand()方法可用来执行很多我们无法实现的操作. execComman ...
- JS 的execCommand 方法 做的一个简单富文本
execCommand 当一个 HTML 文档切换到设计模式(designMode)时,文档对象暴露 execCommand 方法,该方法允许运行命令来操纵可编辑区域的内容.大多数命令影响文档的选择( ...
- JS开发备忘笔记-- Javascript中document.execCommand()的用法
document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数]) 其中:sCommand为指令 ...
- document.execCommand()的用法小记
项目中遇到金额输入框限制只能输入数字,输入特殊字符或者字母汉字时间隔不到1秒内容就会自动清空.跟正则纠缠多年的我初次见到,很是神奇-.- 代码实现: <input type="text ...
- JavaScript:document.execCommand()的用法
document.execCommand()的用法小记 一.语法 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用. 如下格式:document.ex ...
随机推荐
- Content Security Policy
资料来源:阮一峰博客 一.背景 XSS最常见,危害最大的网页安全漏洞,“网页安全政策”从根本上解决问题 二.简介 CSP的实质是白名单制度,明确告诉客户端那些外部资源可以加载和执行. CSP 大大增强 ...
- caffe--anaconda2--makefile.config--compile --ubuntu16.04
sea@sea-X550JK:/media/sea/wsWin10/wsUbuntu16.04/DlFrames/caffe$ cat Makefile.config: ## Refer to htt ...
- VIM中保存编辑的只读文件
如何在VIM中保存编辑的只读文件 你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限.如果已 经做了很多修改,放弃保存的确很懊恼, ...
- MongoDB的选举过程(转)
转自:http://www.mongoing.com/archives/295 MongoDB的复制集具有自动容忍部分节点宕机的功能,在复制集出现问题时时,会触发选举相关的过程,完成主从节点自动切换. ...
- OpenCV 入门示例之五:一个复杂点的变换
前言 前文介绍了一个简单的变换.需要注意的是,很多时候,输出和输入图像的格式是不同的( 大小,深度,通道 ).在本文将展示的程序中,对图像进行了缩放( 使用cvPyrDown 函数 ),这种情况下需要 ...
- vue 后台交互数据-编辑页面
思路~点击编辑按钮,需要获取当前列的id,然后根据id请求后台当前id的数据 1.~~ 2.接收id,并请求页面 获取数据
- JSON格式之GSON解析
JSON格式之GSON解析 最近在做websocket相关,项目需要JSON解析.相较之下感觉google的GSON解析不错. JAVA后台 Gson提供了fromJson()方法来实现从Json相关 ...
- 九度OJ 1151:位操作练习 (位操作)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1679 解决:924 题目描述: 给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形 ...
- 我的Android进阶之旅------>Android实现音乐示波器、均衡器、重低音和音场功能
本实例来自于<疯狂Android讲义>,要实现具体的功能,需要了解以下API: MediaPlayer 媒体播放器 Visualizer 频谱 Equalizer 均衡器 BassBoo ...
- cron表达式(转)
原文地址:http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...