学习JS发送自定义键盘(KeyboardEvent)事件的过程中,遇到了一个小难题:单个按键Tab可以正常发送,焦点能够转移到下一个元素,但想实现Shift+Tab,反向移动焦点时,却被DOM3的浏览器兼容性问题难到了。

  • 根据参考资料1(浅谈Javascript事件模拟 - Mr_BackKom - 博客园 )的方法,行不通,因为我的浏览器是在Webkit核心下。
  • 再找参考资料2(Document Object Model Events #Events-KeyboardEvent),了解了DOM3中的 KeyboardEvent.initKeyboardEvent 函数的定义如下:
void               initKeyboardEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in views::AbstractView viewArg, in DOMString keyIdentifierArg, in unsigned long keyLocationArg, in DOMString modifiersList);

根据资料1的经验,使用DOM3标准来调用,结果还是失败。

  • 无奈之下,只好下载Webkit源代码直接寻找该核心实现的源代码函数原型,结果如下:
void KeyboardEvent::initKeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,const String &keyIdentifier, unsigned location,bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey)
{if (dispatched())return;initUIEvent(type, canBubble, cancelable, view, 0);m_keyIdentifier = keyIdentifier;m_location = location;m_ctrlKey = ctrlKey;m_shiftKey = shiftKey;m_altKey = altKey;m_metaKey = metaKey;m_altGraphKey = altGraphKey;
}

按此原型再次调用,终于成功!(PS:开源就是好啊!)

模拟Shift+Tab代码如下:

var evt = document.createEvent("KeyboardEvent");
evt.initKeyboardEvent("keydown", true, false, window, 'U+0009',0,false,false,true,false,false);
e.currentTarget.dispatchEvent(evt);

 By:Asion Tang
AT:2013年9月20日 23:58:40

转载于:https://www.cnblogs.com/AsionTang/p/3330917.html

WebKit 内核浏览器 initKeyboardEvent 函数原型相关推荐

  1. 八大Webkit内核浏览器

    列举出时下最流行的Webkit内核浏览器,所以我们并不会做出评测和对比. PS:本文列举的浏览器有一部分为IE+Webkit双核浏览器,如果您对其他IE内核浏览器很感兴趣<抛弃数据!用体验和感觉 ...

  2. C# webkit 内核浏览器 访问https网站 显示空白或者提示 Problem with the SSL CA cert (path? access rights?)

    如题 解决方法: 安装中文路径,经常 出现问题.改下安装路径. 只需要动态链接库所在路径上没有中文字符,webkit内核浏览器就可以访问https网址. 转自:C# webkit 内核浏览器 访问ht ...

  3. webkit内核 css,纯CSS改变webkit内核浏览器的滚动条样式

    基于webkit的浏览器现在可以自定义其滚动条的样式了,实现代码如下: 复制代码代码如下: ::-webkit-scrollbar/*整体部分*/ { width: 10px; height:10px ...

  4. -webkit-gradient webkit内核浏览器的Linear Gradients (线性渐变) -Css3演示

    webkit内核的safari. Chrome的Linear Gradients (线性渐变)的几点说明及演示: webkit内核的safari. Chrome的Linear Gradients (线 ...

  5. webkit内核浏览器的CSS写法

    -webkit-tap-highlight-color: transparent; Mobile上点击链接高亮的时候设置颜色为透明 -webkit-user-select: none; 设置为无法选择 ...

  6. 修改webkit内核浏览器滚动条样式(修改element-ui table样式)

    webkit浏览器css设置滚动条主要有下面7个属性 1. ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 2. ::-webkit-scrollbar-button 滚动条 ...

  7. 开源浏览器引擎Webkit引发浏览器格局变化

    几乎一夜之间,原本采用IE核心的国产浏览器纷纷上马双核心,也让Webkit这个本不为大众熟知的技术术语走向前台.国产浏览器为何青睐Webkit?Webkit又会为竞争激烈的浏览器市场带来什么样的变化? ...

  8. Windows上使用CEF嵌入基于chrome内核浏览器小例

    原文地址::https://blog.csdn.net/mfcing/article/details/43953433?utm_source=distribute.pc_relevant.none-t ...

  9. 【转】C# 开发Chrome内核浏览器(WebKit.net)

    WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器.这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能. 第一步: 下载 ...

最新文章

  1. jQuery ajax 传递JSON数组到Spring Controller
  2. java synchronized 参数_个人对synchronized锁的参数理解,如果有误望指出
  3. asp.net关于kindeditor 上传图片出现服务器故障的解决办法
  4. 【PC工具】如何简单粗暴无脑的解方程
  5. QoE驱动的端到端视频直播技术演进
  6. AlexNet 和 VGG-Net的区别
  7. 浅谈 Spring 框架注解的用法分析
  8. COJ1196(Staginner 去爬山)
  9. java - 水仙花数
  10. Ubuntu(Deepin)搭建Android开发环境(Android Studio)
  11. 照葫芦画瓢之老男孩购物车程序
  12. 也许,这会是一个好的开始
  13. docker安装oracle11g史上最全步骤(带图文)
  14. 线性回归(一):一元线性回归(附python实现)
  15. 基于OpenCV的PHP图像人脸检测识别…
  16. 华为虚拟化usb服务器,华为FusionComputer服务器虚拟化完美解决方案
  17. android接入facebook登陆
  18. 使用es6模块化出现Access to script at 'file:///... ..from origin 'null' has been blocked。。。错误
  19. 技巧篇:常用的R代码汇总
  20. 语音唤醒真香警告,轻松开启与Siri、小度和小爱的畅聊

热门文章

  1. python编写代码实现文件的拷贝功能_python利用os模块编写文件复制功能——copy()函数用法...
  2. cheatengine找不到数值_浙江工程勘察资质找谁代办(圆你资质梦)
  3. java shell排序_八大排序算法——希尔(shell)排序
  4. php批量解析json,封装php类批量解析css成json格式_html/css_WEB-ITnose
  5. C++socket编程(九):9.1 UDP实战Syslog服务器
  6. java弱口令生成1001无标题,教你批量生成自动发卡平台需要的卡密数据
  7. mysql ignore space_MySQL日志存储空间满引发的错误
  8. nextcloud如何填写数据库_NextCloud安装使用心得记录
  9. uwp post php,window_Win10开发系列专题五 UWP应用添加画布及语音输入支持,这是微软Win10十个开发系列专 - phpStudy...
  10. go语言 recover