我正在使用 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/