web-dev-qa-db-ja.com

マウスのクリックをシミュレートするためにevent.initMouseEventを使用する場合

Event.initMouseEventを使用してマウスクリックをシミュレートするための無害なユースケースはあるのでしょうか。次の方法でポップアンダー広告を作成するために使用されていることがわかりました。

        var e = document.createEvent('MouseEvents');
        e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
        a.dispatchEvent(e);

このコードは、ブラウザウィンドウを開くときのクリックをシミュレートして、その下に新しく開いたウィンドウを強制します。悪の。

ブラウザーの拡張機能を使用して、自分のブラウザーでシミュレートされたすべてのクリックを単に防止することを考えていますが、その過程で有用なWebサイトと動作を壊すのではないかと思います。したがって、マウスクリックのシミュレーションを正当化するのにどのような状況が正当化されるのか、そしてそれを非悪の方法で使用する大きなサイトがあるのか​​と思います。

5
Protector one

シミュレートされたマウスクリックがデフォルトのアクションを引き起こすという事実は無視します 後方互換性を維持するためだけに -したがって、例で言及したコードは実際に悪です。


マウスイベントをシミュレートする正当なケースはたくさんあります。

  • テスト-これは私の意見では断然最も重要なものです。コードが正しく反応することをテストしたい場合がよくあります。たとえば、ボタンをクリックすると非アクティブになることをテストしたいとします(そのため、ユーザーは再度クリックしてAJAX呼び出しなどを送信することができなくなります)。ユーザーイベントのシミュレーションは、ビューロジックをテストするための効果的な手法です。ユーザーインタラクションのモックは、GUIシステムのテストに全体的に非常に役立ちます。
  • 外部コードの操作-時には、簡潔なAPIを持つプラグインまたはライブラリを操作することになります。時々、それは実際の機能を公開しないが、要素XをクリックするとYを実行することを通知します。悲しい真実は、そのようなプラグインは私たちが認めたいよりも一般的であり、イベントのシミュレーションはそのようなプラグインに話す方法です。
  • スクレイピング-場合によっては、ユーザーアクションをシミュレートして、他の方法ではその情報が利用できないときに、スクレイピング用の情報を取得することができます。たとえば、ページからすべての情報を抽出したいが、そのページにはクリックする必要がある情報が含まれている場合などです。
  • ユーザースクリプトによる自動化-ページを「フック」し、ページの操作を簡単にするスクリプトを作成してしまうことがあります。これらのケースでは、対象となるコードの実際の(しばしば縮小され、時には難読化されている)実装を読みたくなく、ユーザーアクションをシミュレートしたいだけです。

これらすべてのことをまとめると、ユーザーインターフェイスに対して機能し、バッキングコードをしないことになります。何らかの理由で(そして最も一般的なimoですが)ページのユーザーインターフェイスを少し前に戻して扱いたい場合-マウスクリックのシミュレーションは非常に有益です。

6

e.initMouseEventは、一部のライブラリで、携帯電話のクリックイベントをシミュレートするために使用されます。これにより、クリックイベントとタッチイベントの間のコード互換性が可能になります。

例は Ionic または Leaflet で確認できます

1
wdev