Javascript 在Chrome扩展上下文中触发时,Touch事件将丢失'touchs'属性
我试图从Chrome扩展中模拟触摸事件。我在设备模式下使用开发者工具来模拟触摸浏览器 当我在文档的上下文中运行模拟触摸事件的代码时(在开发人员工具下拉框中选择Javascript 在Chrome扩展上下文中触发时,Touch事件将丢失'touchs'属性,javascript,google-chrome-extension,touch,event-simulation,Javascript,Google Chrome Extension,Touch,Event Simulation,我试图从Chrome扩展中模拟触摸事件。我在设备模式下使用开发者工具来模拟触摸浏览器 当我在文档的上下文中运行模拟触摸事件的代码时(在开发人员工具下拉框中选择),它工作正常。但是,当我在任何扩展(例如AdBlock)的上下文中运行相同的代码时,触摸事件到达事件处理程序,而不使用触摸和更改触摸属性(它们是未定义的) 这是Chrome的缺陷还是我遗漏了什么 当我触摸红色区域时,我得到以下输出: 获得真实接触事件1 (1是指触摸的手指数) 当我模拟触摸时,我得到以下输出: 得到模拟触摸事件1 如果我将
),它工作正常。但是,当我在任何扩展(例如AdBlock)的上下文中运行相同的代码时,触摸事件到达事件处理程序,而不使用触摸
和更改触摸
属性(它们是未定义的
)
这是Chrome的缺陷还是我遗漏了什么
当我触摸红色区域时,我得到以下输出:
获得真实接触事件1
(1
是指触摸的手指数)
当我模拟触摸时,我得到以下输出:
得到模拟触摸事件1
如果我将JavaScript复制到扩展上下文下的开发工具中
我得到以下输出:
获得真实接触事件空值
(真正的原因是我无法访问捕获的simulated
变量,这与这个问题无关)
编辑:我已经向chromium项目提交了一份报告,以防这真的是一个bug
代码如下:
var计数=0;
函数日志(msg){
var out=document.getElementById('output');
out.innerHTML=++count+':'+msg+'
'+out.innerHTML;
}
模拟var=假;
函数消息(){
返回'Got'+(模拟的?'simulated':'real')+'touch event';
}
函数fire(){
模拟=真实;
var event=document.createEvent('event');
initEvent('touchstart',true,true);
var元素=document.getElementById('x');
event.touch=createTouchList(createTouch(元素{
x:5,
y:5
}, 42));
元素。dispatchEvent(事件);
}
火=火;
函数createTouch(元素、点、id){
if(document.createTouch)
返回document.createTouch(窗口、元素、id、point.x、point.y、point.x、point.y);
返回{
视图:窗口,
目标:要素,
标识符:id | | 0,
第x页:第x点,
佩吉:重点是,
clientX:point.x,
克利提:重点是
};
}
函数createTouchList(触摸){
if(document.createTouchList)
返回文档。创建触摸列表(触摸);
if(Array.isArray(触摸))
回击;
返回[触摸];
}
日志(“监听”);
document.getElementById('x')。addEventListener('touchstart',函数(e){
日志(message()+(e.touchs?e.touchs.length:'null');
模拟=假;
},对)代码>
点击这里
模拟触摸事件