JavaScript: Änderung der Auswahl bei Firefox für Android verfolgen

8

Ich suche nach einer Möglichkeit, die Textauswahl auf einer Webseite zu verfolgen. Ich brauche Code, der ausgeführt wird, wenn die Auswahl geändert wird. Ich habe dies erfolgreich auf allen gängigen Desktop-Browsern gemacht, aber das scheint nicht auf Firefox für Android zu funktionieren.

Ich habe drei Ansätze ausprobiert (keine funktionierte!):

  1. Versucht, das "mouseup" -Ereignis abzufangen und zu prüfen, ob es ein nicht leere Textauswahl. Problem ist "mouseup" wird nicht erhalten ausgelöst, wenn während des mousedown-move-up eine Auswahl getroffen wurde Sequenz!
  2. Versucht, dasselbe mit dem "touchend" -Ereignis zu tun - Das gleiche Ergebnis.
  3. Versucht, das Ereignis "selectionchange" abzufangen. Ich habe gesehen, dass es nicht ist Wird ausgelöst, wenn sich die Auswahl ändert, da der Konfigurationsschlüssel benötigt wird "dom.select_events.enabled" wird gesetzt. Dies ist standardmäßig false und ich kann meine Besucher natürlich nicht bitten, die Browsereinstellungen zu ändern: -)

Außerdem werden die ersten beiden Ereignisse erwartungsgemäß nicht ausgelöst, wenn die Auswahl durch Ziehen der Start / Ende-Auswahlmarkierungen erweitert oder reduziert wird.

Die einzige Lösung, an die ich jetzt denken kann, ist ein periodischer Poller (mit setInterval), der prüft, ob es eine Textauswahl gibt. Das ist definitiv unrein und anti-performance.

Alle Alternativen und / oder Ratschläge sind sehr hilfreich.

Danke

    
techfoobar 20.08.2016, 04:28
quelle

1 Antwort

2

1) Native Textauswahl-Ereignisse

Momentan scheint die Umfrage die einzige Lösung zu sein. Allerdings ist das selectionchange -Ereignis derzeit experimentell in Firefox für Android Nightly implementiert . Er kann aktiviert werden, indem das Flag dom.select_events.enabled auf true (standardmäßig false ) gesetzt wird.

In Nightly-Builds ist dieses Flag bereits standardmäßig auf true eingestellt. Daher besteht die Möglichkeit, dass Sie es in ein paar Monaten normal verwenden können.

2) Finde Ereignisse, die funktionieren

(UNTESTED !!)

Auch wenn onselectstart in Firefox für Android noch nicht produktiv verwendet werden kann, ist die einzige praktikable einfache Lösung das Polling.

Um die Leistung zu verbessern und die Kosten zu senken, kann polling im Fenster blur event gestartet werden. Wenn der Benutzer eine Auswahl trifft, sollte der Fokus auf das Ansichtsfenster (ungetestet) gesetzt werden.

%Vor%

Wenn der Fokus zurückgegeben wird , kann der Abrufvorgang gestoppt werden .

%Vor%

Um zu überprüfen, ob der Browser tatsächlich Textauswahlereignisse unterstützt , können Sie diese Funktion verwenden:

%Vor%

3) Hacking

Eine dritte Idee ist die Deaktivierung der Textauswahl für mobile Firefox-Benutzer über CSS ( -moz-user-select: none ), die Implementierung einer benutzerdefinierten Textauswahlfunktion basierend auf den Start- und Endpositionen und die Rückübertragung des nativen Auswahlbereichs über HTMLElement.setSelectionRange() an den Browser. .

    
Gerald 29.08.2016, 09:25
quelle