私の Firefox 拡張機能は、クリックなどのイベントを生成します。応答として、Web アプリケーションは新しいウィンドウを開こうとします。ただし、ポップアップ ブロッカーが作動すると、Firefox によってブロックされます。
私の質問は、拡張機能によって生成されたイベントが「信頼できる」ものとして扱われず、ユーザーのクリック時に同じように扱われないのはなぜですか? その動作を達成するためのバックドアはありますか?
私の Firefox 拡張機能は、クリックなどのイベントを生成します。応答として、Web アプリケーションは新しいウィンドウを開こうとします。ただし、ポップアップ ブロッカーが作動すると、Firefox によってブロックされます。
私の質問は、拡張機能によって生成されたイベントが「信頼できる」ものとして扱われず、ユーザーのクリック時に同じように扱われないのはなぜですか? その動作を達成するためのバックドアはありますか?
編集:この回答はひどく時代遅れです。これは、Firefox 57 の時点でサポートされなくなった従来の拡張機能を指します。Web 拡張 API に基づく拡張機能には、信頼できるイベントを生成する方法がありません。
はい、拡張機能によって生成されたイベントは常に信頼されます。つまり、イベントは、信頼できるイベントを必要とするアクションをトリガーできるようになります (例: ブラウザーのタブを切り替えるための Ctrl-Tabevent.isTrusted
イベント)。ただし、それらは合成されたイベントのままであり、ネイティブ (OS レベル) のイベントが関連付けられていないことを意味します。また、ポップアップ ブロッカーはネイティブ イベントで動作するため、拡張機能によって生成されたイベントは表示されません。true
keypress
の代わりにnsIDOMWindowUtils.sendMouseEventToWindow()を使用できますdocument.createEvent()
。このメソッドはテスト用であり、ネイティブ イベントも生成します。ポップアップ ブロッカーにはこれで十分です。
var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.sendMouseEventToWindow("click", 10, 20, 0, 1, 0);