2016-04-05 4 views
2

Was passiert, wenn MS Edge ein Objekt namens window.chrome hat, das den gleichen Namen hat wie der in Google Chrome.MS Edge hat ein window.chrome-Objekt ?? Bricht Browsererkennung ab

Für mich ist dies brechen Browsererkennung Code für Chrome Polyfills. Ich stelle mir vor, dass dies auch anderen Probleme bereiten wird.

Verwendung:

Rand: 25.10586.0.0

Edgehtml: 13,10586

The Edge window.chrome Objekt hat weniger Sachen drin. Das einzige untergeordnete Objekt ist window.chrome.app, während die Chrome-Version über App, Webstore und Runtime verfügt (Chrome-Version 49.0.2623.110, 64-Bit).

Warum sollten sie das tun? Ich könnte sehen, wie man ein richtiges window.chrome-Objekt mit all der Funktionalität macht, aber ein verkrüppeltes Objekt scheint mehr Schaden anrichten zu können als etwas zu helfen.

Wer ist diesem begegnet? Ich habe mich umgesehen und kann nichts finden. Vielen Dank!

+1

Wir sind lange vorbei Browser-Erkennung verwendet - sollten Sie Feature-Erkennung verwenden und Polyfilling fehlende Features jetzt. –

+0

Warum sollten sie ein korrektes window.chrome-Objekt erstellen? Microsoft Edge ist nicht Google Chrome. Es reicht gerade aus, Browser-Erkennungsskripte zu umgehen, die den IE ohne wirklichen Grund diskriminieren. Unglücklicherweise bedeutet das auch, Browser-Erkennungsskripte zu brechen, die einen legitimen Zweck haben - aber dann wird das nur ein Punkt gegen die Browser-Erkennung. – BoltClock

+1

Ich stimme den obigen Punkten zu, aber 'if (window.chrome) {}' ist nicht nur Browser-Erkennung - es war Funktionalitätserkennung, da man von diesem einen Test weitere Funktionen annehmen konnte. Jetzt müssen Sie auch für jede Funktion innerhalb dieses Objekts testen. Dies ist Microsoft versucht, Chrome-spezifische Apps zu brechen. – Archer

Antwort

3

„Sie Funktionen nicht Browser überprüft werden sollen,“

Gesprochen wie jemand, der nie eine Funktion festgestellt, die in mehreren Browsern existiert hat funktioniert, aber nicht funktionieren, oder die gleiche Funktion, in allen Browsern es in angezeigt.

Mein eigener letzter Fall, ich hatte eine kleine Funktion, die seit mindestens 12 Jahren in allen Browsern funktioniert hat, seit vormals Chrome existierte. Die Funktion löst nur eine benutzerdefinierte URL aus, die auf dem Client-Betriebssystem registriert ist, um einen externen Handler auszuführen. Es startet also einfach die benutzerdefinierte URL in einem untergeordneten _blank-Fenster und schließt dieses untergeordnete Fenster sofort.

function foo(stuff,otherstuff) { 
    t = window.open("myproto://"+stuff,"_blank"); 
    t.close(); 
    window.location.replace("path/to/...?"+otherstuff); 
} 

Chrome und nur Chrome, und erst vor kurzem irgendwann Ende 2016 oder so, geändert window.open(), so dass es nicht mehr blockiert, so jetzt um zu arbeiten, dass ich zu tun habe:

t = window.open("myproto://"+stuff,"_blank"); 
t.addEventListener('load',t.close()); 

Ok, nicht das Ende der Welt, mit der Ausnahme, nicht alle Browser diese Funktion hat ...

warten, warten Sie mir nicht sagen ... „Test für das FEATURE !!!!“

Warum habe ich nicht daran gedacht? Vielleicht weil, raten Sie mal, Edge hat die Funktion, und es verhält sich nicht richtig.

Also hier googele ich für Möglichkeiten, Chrome, mit Namen, aus einem Grund zu erkennen.

Sollte ich nicht nur auf das Vorhandensein des Features testen, sondern auch eine Art von Test konstruieren, der tatsächlich versucht, das Feature aufzurufen, um zu sehen, ob es richtig funktioniert? Die Sache, die ich gerade teste, ist das Öffnen und Schließen von Fenstern. Ich kann keine Junk-Fenster aufstellen, die dann stecken bleiben und sich nicht schließen, jedes Mal, wenn die verdammte Seite geladen wird, oder jedes Mal, wenn der Benutzer auf den verdammten Knopf klickt, der die Funktion benötigt ...

und wenn !!window.chrome ist nicht mehr lebensfähig, weil wieder einmal Rand, dann bin ich wieder VORLIEGENDEN völlige buffoonery Ich denke:

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; 
Verwandte Themen