真实的用户操作和程序生成的操作之间有什么区别
What are the differences between a real user action and a programmatically generated?
我正在Chrome上处理webkit通知。方法window.webkitNotifications.requestPermission
只能从用户操作(点击等)中调用。在其他任何地方调用它都没有效果,也不会引发任何错误。
由于某些原因,我需要稍后在另一个事件上运行它,该事件最初是由实际单击生成的。
我试着通过生成这样的点击来运行这个方法:
var a = document.createElement('a');
a.addEventListener('click', function () {
window.webkitNotifications.requestPermission()
});
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0,
false, false, false, false, 0, null);
a.dispatchEvent(evt);
但正如预期的那样,这种方法没有效果。这让我想知道Chrome是如何检测用户行为的?生成的事件和真实用户操作生成的事件之间有什么区别?
我还试图保留对原始点击事件的引用,并在需要调用此方法时将其传递回,但它不起作用。
我制作了一把小提琴来说明我的问题:http://jsfiddle.net/arnaudbreton/B38yJ/1/
用户生成的所有单击操作都将具有一个秘密属性,用于指示事件是否由用户创建。开发人员看不到它,但它存在于底层javascript引擎中。
为了防止恶意代码在用户的浏览器上运行,例如当您意外访问恶意网站时,这是必要的。
一个常见的例子是,不能通过简单地触发input[type=file]
上的单击事件来打开文件浏览器对话框。用户已经创建了一个真正的点击事件来打开文件浏览器。
另一件事是,所有事件侦听器都必须是同步的,才能触发与上面的示例类似的安全敏感函数。
总之,假事件不能调用安全敏感的浏览器API。
相关文章:
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 在 React JS 中,什么时候应该使用存储而不是直接操作视图的状态
- 这个Javascript出了什么问题"Internet Explorer无法打开Internet站点-操作中止
- 什么's在Observables(angular2)中操作数据的模式
- 操作 RxJS 流并发布结果的可观察量的正确方法是什么?
- JavaScript - 在哪些操作之后需要 toFixed() 以及应该传递什么参数
- 如果我想在没有jQuery的情况下操作HTML / CSS,我应该应用什么方法
- 是什么导致我的绘制数组调用无效操作
- JavaScript 中操作的“上下文”是什么意思
- 真实的用户操作和程序生成的操作之间有什么区别
- 什么'这是让函数返回等待异步操作完成的最佳方法
- 在redux中使用thunk中间件比使用常规函数作为异步操作创建者有什么好处
- Redux异步操作测试的目的是什么
- html5地理操作在chrome/windows7中不起作用.但它在chrome/XP中工作..html5有什么问题吗
- 分配来自MVC 4控制器操作的json值的有效方法是什么
- 什么是“>>="操作人员
- 什么是可以创建和操作SVG的最佳javascript框架
- 什么's是>>>操作人员
- 这个字符串拆分操作中的“filter”调用是什么
- 在React+Redux.js应用程序中,在Provider组件之外操作DOM元素的正确方法是什么