window.focus () funktioniert nicht in Google Chrome
Nur Wundern, wenn Google Chrome unterstützen window.focus()
irgendwann. Wenn ich meine Unterstützung, meine ich. Die nennen es nicht scheitern, es funktioniert einfach nicht alles tun. Alle anderen großen Browser haben dieses problem nicht: FireFox, IE6-IE8 und Safari.
Ich habe eine client-side-Klasse für die Verwaltung von browser-Fenstern. Wenn ich zuerst ein Fenster erstellen und das Fenster kommt in den Vordergrund, aber die nachfolgenden versuche, den Fokus auf die Fenster funktionieren nicht.
Was ich sagen kann, dies scheint ein Sicherheitsfeature zu vermeiden, lästige pop-ups und es scheint nicht zu sein ein WebKit-Problem, wie es funktioniert in Safari.
Ich weiß, eine Idee, die jemand vorgezogen wurde, das Fenster zu schließen, öffnen Sie es erneut, aber dies ist eine schreckliche Lösung. Googeln zeigt, dass ich scheinbar nicht die einzige person, die frustriert mit diesem.
Und nur zu 100% klar, ich meine, neue Fenster, nicht tabs (Registerkarten können nicht fokussiert werden, von dem, was ich gelesen habe) und alle Fenster werden geöffnet, sind in der gleichen Domäne.
Irgendwelche Ideen, workarounds abgesehen von den schlechten, die ich oben erwähnt?
Es ist ein Fehler protokolliert, auf dem Chromium-Projekt zu diesem Thema wenden Sie sich hier. Dank für die Buchung, die Reichen.
MyCompany = { UI: {} }; //Put this here if you want to test the code. I create these namespaces elsewhere in code.
MyCompany.UI.Window = new function() {
//Private fields
var that = this;
var windowHandles = {};
//Public Members
this.windowExists = function(windowTarget) {
return windowTarget && windowHandles[windowTarget] && !windowHandles[windowTarget].closed;
}
this.open = function(url, windowTarget, windowProperties) {
//See if we have a window handle and if it's closed or not.
if (that.windowExists(windowTarget)) {
//We still have our window object so let's check if the URLs is the same as the one we're trying to load.
var currentLocation = windowHandles[windowTarget].location;
if (
(
/^http(?:s?):/.test(url) && currentLocation.href !== url
)
||
(
//This check is required because the URL might be the same, but absolute,
//e.g. /Default.aspx ... instead of http://localhost/Default.aspx ...
!/^http(?:s?):/.test(url) &&
(currentLocation.pathname + currentLocation.search + currentLocation.hash) !== url
)
) {
//Not the same URL, so load the new one.
windowHandles[windowTarget].location = url;
}
//Give focus to the window. This works in IE 6/7/8, FireFox, Safari but not Chrome.
//Well in Chrome it works the first time, but subsequent focus attempts fail,. I believe this is a security feature in Chrome to avoid annoying popups.
windowHandles[windowTarget].focus();
}
else
{
//Need to do this so that tabbed browsers (pretty much all browsers except IE6) actually open a new window
//as opposed to a tab. By specifying at least one window property, we're guaranteed to have a new window created instead
//of a tab.
windowProperties = windowProperties || 'menubar=yes,location=yes,width=700, height=400, scrollbars=yes, resizable= yes';
windowTarget = windowTarget || "_blank";
//Create a new window.
var windowHandle = windowProperties ? window.open(url, windowTarget, windowProperties) : window.open(url, windowTarget);
if (null === windowHandle) {
alert("You have a popup blocker enabled. Please allow popups for " + location.protocol + "//" + location.host);
}
else {
if ("_blank" !== windowTarget) {
//Store the window handle for reuse if a handle was specified.
windowHandles[windowTarget] = windowHandle;
windowHandles[windowTarget].focus();
}
}
}
}
}
InformationsquelleAutor der Frage nickytonline | 2010-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Immer noch die gleiche version 14.0.835.202 m auf Windows 7; eine andere Lösung gefunden, mehr nicht elegant, aber zumindest vermeiden, dass Daten auf der Seite: zeigen Sie eine Benachrichtigung in das Fenster, das Sie wollen, zu konzentrieren.
InformationsquelleAutor der Antwort Sti
Ich ve wurde kämpfen mit diesem Problem. Ich wollte einen Verweis auf ein anderes Fenster, so war ich die Ausstellung einer:
Allerdings wenn ich diesen Befehl ausgeben, wird der browser Umschalten des Fokus auf die OtherWindow. Ich dachte, das könnte gelöst werden, indem dies zu tun:
aber die Fenster.focus() hat keine Wirkung. Ich habe versucht:
Aber die Fenster.focus () - Aufruf immer noch keine Wirkung hatte.
Ich das Problem beheben, indem Sie den folgenden code, um die OtherWindow Quelle.
Dann änderte ich den code in der main-Fenster:
InformationsquelleAutor der Antwort Aheho
UPDATE: Diese Lösung erscheint nicht mehr in Chrome.
Unglaublich, die Lösung ist ganz einfach. Ich habe versucht zu verstehen, dieses Problem für mindestens eine Woche. Alles, was Sie tun müssen, ist, verwischen die Fenster dann, damit es den Fokus erhält. Ich hatte versucht, dies vorher und es hat nicht funktioniert.
So landete ich also versuchen Sie dies:
und das scheint zu funktionieren.
Ich habe aktualisiert mein code hier:
InformationsquelleAutor der Antwort nickytonline
Einen Vorschlag von jemand ' s blog zu verwenden:
Folgenden dieser Fehler nützlich sein könnten.
InformationsquelleAutor der Antwort Rich Bradshaw
Hier ist eine Abhilfe, die ich verwenden konnte. Es kann nicht für alle Arbeit, aber es tut, was ich es brauche, und es nicht umgehen Szenarien, in denen Ihr pop-up wurde aktualisiert via Ajax nach der ersten Belastung (sprich - es geht nicht zurück an den server, um die Seite neu laden).
Ich bin mit dem neuen Fenster-trick, um es so Aussehen, wie ich bin nur die Neuausrichtung der Seite, aber ich bin eigentlich ein erstellen eines neuen Fensters mit dem genauen Inhalt der alten Fenster und schließen Sie die alten Fenster.
Müssen Sie nur sicherstellen, dass Sie sind in der Lage, schnappen Sie sich alles, was Sie für das neue Fenster. Ich habe alles was ich brauche in einem
#everything
div; müssen Sie möglicherweise ändern Sie das für Ihre Bedürfnisse.Hoffe, dass dies zumindest hilft einigen von Euch.
Hinweis: inline Javascript scheint auszuführen, die mit diesem Ansatz verbunden Javascript nicht. Gehen Sie mit Vorsicht, ob dies ein problem für Sie.
InformationsquelleAutor der Antwort tobinibot
Die einzige Lösung, die momentan funktioniert in Chrome ist dieser code in neuem Fenster:
Leider die Lösung funktioniert nur unter zwei Bedingungen:
window.opener
hat, haben seinen Namen festlegen, auf Dokument laden (window.name="WhateverName";
)window.open()
genannt wird, auf die Benutzer klicken Sie aufInformationsquelleAutor der Antwort Matej Balantič
window.focus()
für die child-windows funktioniert gut für mich auf Chrome v52 auf Windows, aber NUR innerhalb einer vom Benutzer initiiertes Ereignis, wie z.B. ein klicken Sie auf Rückruf. (Dies ist die gleiche Einschränkung, dass die pop-up blockiert gilt fürwindow.open()
ruft.)InformationsquelleAutor der Antwort Rich
können Sie
focus
anderes Fenster aufrufenopen
mitjavascript:;
alsurl
parameter:InformationsquelleAutor der Antwort pwolaq
Fand ich eine ganz einfache Lösung.
Wenn Sie öffnen ein Fenster, das in einem hintergrund-position, auf dem gleichen Fenster ("_self"), Chrome automatisch Fokus-Fenster.
Zurückgewinnen Fokus eines Fensters verwenden Sie den folgenden code:
InformationsquelleAutor der Antwort Raposo
Dies funktioniert gut für mich.
Entfernt starten leeres Fenster von catch-block, anstatt Sie die url direkt, was verhindert, dass Benutzer die Verwirrung, wenn er sagt, leeres Fenster.
InformationsquelleAutor der Antwort Praveena M
Kämpfte ich dies in Chrome. Ich wollte ein popup-Fenster angezeigt, wenn der Benutzer auf einen link geklickt, auf den parent-Bildschirm. Funktioniert das erste mal das popup-Fenster wird angezeigt, aber sobald das popup den Fokus verliert, javascript kann nicht bringen Sie zurück, um wieder in den Vordergrund; Sie müssen manuell klicken Sie auf das Fenster. Hier ist was für mich gearbeitet. Dieses Skript ist das übergeordnete Fenster (mit den links). Wie Sie sehen können, habe ich es am Ende der HEAD-Bereich::
Alle links sind
<A href="Javascript: openLink('url')">
. Wenn der Benutzer nicht schließen das popup-Fenster manuell, es wird geschlossen, wenn das übergeordnete Fenster wieder aktiv ist. Also das popup wird zerstört und neu erstellt jedes mal. Scheint ein bisschen kompliziert, aber es funktioniert für mich.InformationsquelleAutor der Antwort Uncle Mike
Vielleicht nicht das, was jeder will, aber (in Chrom), bemerkte ich, dass eine Warnung ausgelöst von der pop-uped Seite hält sich der Fokus der popup. Also mache ich das jetzt...
Auf dem pop-uped Seite, haben eine Funktion im header geladen:
Und dann auf die pop-uped Seite:
So ist dies eine Variante der Schließung der popup, wenn der Fokus verloren geht. Aber in meinem Fall, das popup ist ein edit-Fenster für die Daten. Ein Fenster, das man nicht schließen möchten, ungefragt. So, nun wird der Benutzer informiert wird, den Fokus zu fallen und bekommt dann eine Wahl, wenn er will, um das Fenster zu schließen oder nicht. Wieder weit entfernt von perfekt, aber es funktionierte für mich.
(sanft)
InformationsquelleAutor der Antwort vonDutch
InformationsquelleAutor der Antwort Alex