Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 真实用户操作和编程生成的操作之间有什么区别?_Javascript_Google Chrome_Webkit_Chromium - Fatal编程技术网

Javascript 真实用户操作和编程生成的操作之间有什么区别?

Javascript 真实用户操作和编程生成的操作之间有什么区别?,javascript,google-chrome,webkit,chromium,Javascript,Google Chrome,Webkit,Chromium,我正在使用Chrome上的webkit通知。 只能从用户操作(单击等)调用方法window.webkitNotifications.requestPermission。在任何其他地方调用它都不会产生任何效果,也不会抛出任何错误 出于某些原因,我需要稍后在另一个事件上运行它,该事件最初是由真正的单击生成的 我尝试通过如下方式生成单击来运行此方法: var a = document.createElement('a'); a.addEventListener('click', function ()

我正在使用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是如何检测用户行为的? 生成的事件和真实用户操作生成的事件之间有什么区别

我还尝试保留对原始单击事件的引用,并在需要调用此方法时将其传回,但它不起作用


我创建了一个提琴来说明我的问题:

用户生成的所有单击操作都将具有一个秘密属性,指示事件是否由用户创建。开发人员看不到它,但它用于底层javascript引擎

为了防止恶意代码在用户的浏览器上运行,例如当您无意中访问恶意网站时,这是必需的

一个常见的例子是,您不能通过简单地触发
input[type=file]
上的单击事件来打开文件浏览器对话框。用户已创建一个真正的单击事件以打开文件浏览器

另一件事是,所有事件侦听器必须是同步的,才能触发安全敏感函数,如上面的示例所示

总之,假事件不能调用安全敏感的浏览器API