2013-03-08 4 views
5

Ich verstehe das Ereignis mouseup für das Fenster ist einfach nicht da für IE 7 und 8. Ich fragte mich, ob jemand eine Lösung für diese oder wenn gefunden hat das ist sogar möglich.Hack für `mouseup` außerhalb des Fensters in IE 7/8

Ich arbeite gerade an einem Projekt, wo der Benutzer klicken kann, ziehen, um eine Linie zu zeichnen, und wenn der Benutzer außerhalb des Fensters und lässt auf die Maus zieht, wird die Zeichnungstransaktion abgebrochen.

+1

Da gibt es einen Sicherheitsfehler für IE (alle Versionen) Tracking/Bereitstellung von Mausbewegungen außerhalb des Browser-Fensters (auch wenn die App nicht im Fokus hat!) Http://spider.io/blog/2012/12/internet-explorer-data-leakage/wir (die Entwickler-Community) erwarten vollständig, dass dieses Verhalten in allen IE-Versionen behoben wird. An diesem Punkt wäre ich unglaublich vorsichtig, wenn ich von Ereignissen abhängig bin, die außerhalb des Browserfensters ausgelöst werden. – scunliffe

+1

... Aber Microsoft (die sich ihrer Position in der Online-Werbewelt bewusst sind) wartet ab: http://blogs.msdn.com/b/ie/archive/2012/12/13/update- zu-angebliche-Informationen-und-Sicherheit-Problem-mit-Maus-Position-behavior.aspx – scunliffe

Antwort

0

Nicht direkt, aber ich glaube, das sollte funktionieren.

In Ihrem mousemove Ereignis, überprüfen Sie die Event.buttons Eigenschaft. Wenn es Null ist, muss der Benutzer die Maus außerhalb des Fensters freigegeben haben, und Sie können den Mauszeiger abbrechen.

Ich überprüfe die Browser-Kompatibilität jetzt, damit diese Antwort bearbeitet werden kann. Mein Computer ist gerade langsam!

2

Ihr Problem klingt, als ob es mehr aus dem Fenster wäre, das den Rahmen des Ereignisses verliert.

Verwenden Sie jQuery? Mit jQuery können Sie auch das Ereignis mouse move markieren und mit dem Attribut "which" erkennen, ob die Schaltfläche gedrückt ist. Das feuert sogar, wenn du wieder ins Fenster kommst. Aber es feuert nicht, wenn Sie außerhalb des Fensters sind.

Alternativ können Sie $ (window) .mouseleave verwenden, um zu erkennen, wenn es das Fenster verlässt. Sobald Sie das Fenster jedoch verlassen haben, können Sie keine weiteren Mausereignisse mehr erkennen (das wäre ein schrecklicher Fehler, wenn sie erkennen würden, wenn Sie auf Ihren Desktop klicken usw.).

Sie sind also durch die Browser-Sicherheitsimplementierungen in ALLEN Browsern etwas eingeschränkt und können dies nicht umgehen ... aber Sie können einige Workaround-Ereignisse hinzufügen, um eine "ähnliche" Erfahrung zu ermöglichen.

+0

Wir verwenden Dojo 1.7. Ich dachte daran, das 'mouseleave'-Ereignis des Fensters zu verwenden, aber das entspricht der Funktionalität in anderen Browsern. Es gibt _sort-of_ eine Möglichkeit, Mausereignisse außerhalb des Fensters in einigen Browsern zu erkennen. Wir haben bereits das window.onmouseup-Ereignis implementiert, das registriert wird, wenn der Benutzer den Mauszeiger in die Zeichenfläche bewegt. – AdamDev

+0

Cool, Dojo, Mootools oder jQuery zumindest verwenden Sie etwas, um die Browserunterschiede wegzuspalten. In diesem Fall denke ich, dass der Bär versuchen wird, irgendwelche/einige Ereignisse mit der Maus außerhalb des Browsers zu erkennen. –

+0

Ich dachte mir, aber es war zumindest einen Versuch wert! Danke für Ihre Hilfe. – AdamDev