Ich habe einige Javascript, die auf die Verwendung von window.open und Inter-Window-Kommunikation angewiesen (wo das neue 'Kind' Fenster communicates success/failure to the 'parent' window).Erkennung der Browser-Unterstützung für Inter-Fenster-Kommunikation
Diese (Inter-Window-Kommunikation) funktioniert in den meisten Fällen gut, funktioniert aber nicht für einige Browser, die Inter-Window-Kommunikation nicht unterstützen. Beispiele umfassen Windows Phone und iPhone's UIWebView.
Ich mache derzeit Client-Seite (Javascript-basierte) user-agent sniffing, um diese Szenarien zu erkennen - und Fallback auf einen anderen Code-Pfad, um das Problem zu umgehen.
Gibt es eine Alternative zum User-Agent-Sniffing, die ich verwenden könnte?
Um klar zu sein, funktioniert die window.open (wo funktioniert bedeutet 'es öffnet die angeforderte URL'). Was nicht zuverlässig ist, verwendet window.opener und postMessage, um Inter-Window-Kommunikation vom 'Kind' zum 'Eltern' zu tun.
Das Kind kann auch auf die window.opener-Eigenschaft zugreifen - die null sein sollte - aber das ist leider keine zuverlässige Erkennungstechnik. Wenn Sie beispielsweise das untergeordnete Fenster direkt öffnen (ohne window.open vom übergeordneten Element zu verwenden), ist window.opener gleich null, obwohl das untergeordnete Element tatsächlich die Kommunikation zwischen Fenstern unterstützt. – mjwills
ich weiß 'window.open' wird funktionieren, aber wird die Funktion Kind Fenster ID zurückgeben? – Raptor
Ich bin mir nicht sicher, wie es hilft, diese Informationen zu haben. Was ich will, ist Feature-Erkennung im untergeordneten Fenster, ob es mit seinem Elternteil sprechen kann. Der Rückgabewert des Funktionsaufrufs window.open ist offensichtlich nur für den Elternteil verfügbar, so dass "es sich eher auf der anderen Seite dieser luftdichten Luke befindet". Alles, was gesagt wird, die Überprüfung des Rückgabewerts ergibt Null in mobilen IE9 und ein Fensterobjekt in UIWebView. Beachten Sie, dass das neue Fenster in beiden Fällen korrekt geladen wurde (aber nicht mit dem übergeordneten Fenster kommunizieren kann). – mjwills