preventDefault() Bug

  • Ich habe ein HTML5 Canvas, das Maus/Touch-Events bearbeitet und mit preventDefault() verhindert, dass FF (Version 31) die Maus/Touch-Events selbst interpretiert (z.B. die Seite scrollt). Funktioniert in Chrome und Opera problemlos. Funktioniert in FF nur dann, wenn die Adresszeile *immer* eingeblendet ist.

    Wenn die Adresszeile ausblendbar ist, führt eine vertikale Bewegung in jedem Fall zum Ein/Ausblenden der Adresszeile, was zur Folge hat, dass die Seite scrollt (trotz preventDefault) und das Canvas damit unbedienbar wird. (Das ist wie wenn man versuchen würde, mit einem Bleistift auf ein Papier einen Kreis zu zeichnen, das Papier sich aber unter dem Bleistift bewegt.)

    Kennt jemand eine Abhilfe?

  • Aber ja, kein Problem: http://www.janko.at/Raetsel/Nurikabe/021.a.htm

    a) Einstellungen -> Ansicht -> Titelleiste ein -> ok
    b) Einstellungen -> Ansicht -> Titelleiste aus -> Fehler

    Einfach mal ein weißes Feld nach unten oder nach oben ziehen. Oder ein Feld durch Tippen schwärzen und dann nach unten/oben ziehen.

    Nachtrag: stopPropagation() wird natürlich auch aufgerufen, hat aber eigentlich mit dem Browser nichts zu tun.

    Android 4.4 mit FF 31 auf Nexus 7 (2012)

  • Schlechte Neuigkeiten: FF weigert sich, den Bug zu beheben: WONTFIX.

    Dabei widerspricht das Verhalten ganz klar der Spezifikation:
    https://developer.mozilla.org/en-US/docs/Web….preventDefault

    "Calling preventDefault during any stage of event flow cancels the event, meaning that any default action normally taken by the implementation as a result of the event will not occur."

    Nochmal mit Betonung: ANY.

    In allen anderen Browsern auf Android, die ich probiert habe (Chrome, Opera, Android) funktioniert preventDefault spezifikationsgemäß.

    Mir bleibt nur, meinen Besuchern zu raten, die Titelleiste einzuschalten oder einen anderen Browser zu verwenden. :(

    [Nein, ich halte nichts davon, auf FF einzuschlagen, aber WONTFIX ist einer der Gründe, die zum Niedergang von IE geführt haben. Geschichte wiederholt sich. Leider.]

    BTW: Kann leider keinen Link auf den Bug Report setzen, weil es dazu keine vernünftige URL gibt; alle Reports werden unter der gleichen URL (https://bugzilla.mozilla.org/process_bug.cgi) angezeigt. Der wahre Geist des Webs ist das auch nicht.

  • Zitat von Alkaloid

    [Nein, ich halte nichts davon, auf FF einzuschlagen, aber WONTFIX ist einer der Gründe, die zum Niedergang von IE geführt haben. Geschichte wiederholt sich. Leider.]

    Jetzt bleib aber mal auf dem Teppich. Ein Gleichnis mit einem Untergang eines Browsers ist vollkommen unangebracht.

    Zitat von Alkaloid

    BTW: Kann leider keinen Link auf den Bug Report setzen, weil es dazu keine vernünftige URL gibt; alle Reports werden unter der gleichen URL (https://bugzilla.mozilla.org/process_bug.cgi) angezeigt. Der wahre Geist des Webs ist das auch nicht.

    Kann ich nicht nachvollziehen.

  • "Kann ich nicht nachvollziehen": So schaut bei mir die Adresszeile aus, in Firefox:
    [attachment=0]Screenshot_1.jpg[/attachment]
    Da ist nix von einer ID! Ich habe einfach in der Bugzilla-Mail auf den Link geklickt.

    "Jetzt bleib aber mal auf dem Teppich":
    http://gs.statcounter.com/#browser-ww-weekly-200827-201327

    Aber egal auch. Ich nehme den Vergleich zurück. Wie auch immer, Abhilfe gibt es keine. Das ist alles was zählt.

  • Kleiner Tip zu Bugzilla:

    Da geht es rein um Funktionen und Bugs, alles andere ist da Fehl am Platz, und auch nicht Hilfreich.

    Wenn du als Argument eine fehlerhafte Standardeinbindung bringst, dann beeindruckt das schon. Da wird nicht einfach drüber weggesehen. Aber wie dort geschrieben, das war in diesem Fall eine bewusste Entscheidung.
    Aber nichts ist in Stein gemeißelt.
    Du könntest nun Vorschläge machen wie beides unter einen Hut zu bringen ist.
    Z.B, wäre es möglich auf Webseiten, die das Attribut nutzen, die Adressleiste zwangsweise immer Einzublenden?
    In diese Richtung solltest du Argumentieren.

    Mit dem Untergang des Abendlandes zu argumentieren, bring keinem was, das hat mit dem Bugreport auch überhaupt nichts zu tun. Das stärkt nicht gerade deine Verhandlungsbasis.

    Meiner Meinung nach solltest du nicht gleich Aufgeben, mach ruhig noch etwas Druck, aber bleib Konstruktiv.

  • Palli: Ich sehe die Situation ein bischen anders. Ich habe ein Problem festgestellt, das nur mit FF auftritt, und ich habe mit die Zeit genommen und dem Aufwand spendiert, die FF-Entwicklung davon zu informieren. Dort ist man nicht kooperativ. Nicht ich habe eine Lösung zu suchen, sondern die FF-Entwicklung muss das tun. Oder auch nicht.

    Ich suche bei Problemen mit meinen Programmen auch selbst nach Lösungen und erwarte nicht, dass der Problemmelder dies tut. Und es ist mein Interesse, die Probleme meiner Programme zu beheben. Eine ähnliche Haltung erwarte ich auch von anderen Entwicklern.

    Ich habe zwar Interesse, dass meine Programme mit so vielen Browsers wie möglich funktioneiren, aber das interesse geht in diesem Fall nicht so weit, dass ich mich weiter engagiere (von den 10.000 unique visitors meiner Site verwendet nicht einmal 1% mobile FF!).

    "wäre es möglich auf Webseiten, die das Attribut nutzen, die Adressleiste zwangsweise immer Einzublenden?" -- Das funktioniert nicht. preventdefault() ist keine globale Funktion, sondern wird bei jedem einzelnen Event aufgerufen - oder auch nicht. Ich verwender preventDefault() beispielsweise nur bei den Tastenkombinationen, die ich auswerte; alle andere lasse ich ohne preventDefault() durch. Dazu zählen beispielsweise alle ALT-Tastankombinationen, die eine Seite dann in Formularen oder anderweitig verwenden kann.

    "Wenn du als Argument eine fehlerhafte Standardeinbindung bringst, dann beeindruckt das schon." -- Bisher jedenfalls nicht. Keine Reaktion auf das Argument.

    So, das war's dann, von meiner Seite. Der Mohr hat seine Schuldigkeit getan, der Mohr kann gehn. [geht ab.]

  • Mozilla hat diese Entscheidung mit der Sicherheit seiner Nutzer begründet und das ist grundsätzlich ein starkes Argument, gegen welches "Aber andere Browser…" überhaupt nichts ausrichten kann. Mozilla hat nun mal einen anderen, sicher etwas höheren Sicherheitsstandard als zum Beispiel Google. In dem Bugreport wurde auch klargestellt, dass man offen für alternative Vorschläge ist, welche nicht die Sicherheit der Nutzer beeinträchtigen. Aber diese Vorschläge müssen erst gemacht werden. Du willst halt, dass Mozilla es so macht wie andere Browser und die Gründe, welche ausschlaggebend für diese Entscheidung waren, ignoriert. Und dir wurde in dem Bug auch erklärt, dass der Standard eben nicht fehlerhaft implementiert worden ist, sondern dieses Verhalten im Standard undefiniert und damit Sache der Browserhersteller ist.