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/