Ich habe eine Chat-App im Firefox OS Simulator installiert.
Diese App fügt contextmenu
Ereignis-Listener hinzu, mit denen ich einzelne Nachrichten entfernen kann.
Dieser Ereignis-Listener verhindert jedoch, dass ich Text in den Nachrichten auswählen kann.
Wie dieses Problem bei Touch-Geräten gelöst wird, interessiert mich nicht. Da ich einen PC verwende, kann ich contextmenu
durch einen Klick mit der rechten Maustaste einen Event-Listener auslösen.
Wenn ich daher die linke Maustaste gedrückt halte, möchte ich die Anzeige dieses Ereignisses löschen contextmenu
, aber weiterhin Text auswählen können.
Antwort1
Dies ist eine Pro-App-Lösung:
Suchen Sie den Pfad zur App. Er lautet ungefähr so:
[Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
Sichern und extrahieren Sie es
Suchen Sie die JS-Datei, die den
contextmenu
Ereignislistener hinzufügt.Wahrscheinlich wird es so etwas sein wie
someThing.addEventListener('contextmenu', function handler(event) { // ... });
Linke Maustaste herausfiltern:
someThing.addEventListener('contextmenu', function handler(event) { if(evt.button === 0) return; // ... });
Stellen Sie sicher, dass der Simulator geschlossen ist
- Fügen Sie die geänderte Datei an der richtigen Stelle ein
application.zip
.
Antwort2
Dieses Verhalten ist kein Fehler, sondern als Funktion gedacht:
Simulieren Sie Touch-Ereignisse auf dem Desktop
Wenn Sie es dennoch deaktivieren möchten, befolgen Sie diese Schritte:
- Öffnen Sie den Profilordner von Firefox:
- Gehe zu
about:support
- Suchen Sie im Abschnitt „Anwendungsgrundlagen“
- Suchen Sie in der Tabelle nach dem Eintrag „Profile Folder“
- Klicken Sie auf die Schaltfläche "Ordner anzeigen"
- Gehe zu
- Gehen Sie zum
extensions
Unterordner - Suchen Sie den Ordner Ihres Simulators, zB
[email protected]
- Gehe zu
b2g/modules/devtools
Unterordnern - Öffnen Sie die
touch-events.js
Datei mit einem geeigneten Texteditor Finden Sie die
sendContextMenu
Funktion:sendContextMenu: function teh_sendContextMenu(target, x, y, delay) { let doc = target.ownerDocument; let evt = doc.createEvent('MouseEvent'); evt.initMouseEvent('contextmenu', true, true, doc.defaultView, 0, x, y, x, y, false, false, false, false, 0, null); let content = this.getContent(target); let timeout = content.setTimeout((function contextMenu() { target.dispatchEvent(evt); this.cancelClick = true; }).bind(this), delay); return timeout; },
Um das Auslösen des Ereignisses zu vermeiden, kommentieren Sie diese Zeile:
// target.dispatchEvent(evt);
Starten Sie den Simulator neu
Beachten Sie, dass es wichtig ist, nur die Aussendung des Ereignisses zu verhindern und nicht aufzurufen sendContextMenu
. Andernfalls würde der Klick nicht abgebrochen ( this.cancelClick = true
), sodass die Textauswahl nicht richtig funktionieren würde.