javascript Fenster.geöffnet von callback
window.open()
genannt, vom Haupt-thread öffnet einen neuen tab standardmäßig.
Aber, hier neues Fenster öffnen jedes mal (Opera 16 und Google Chrome 29)
<input type="button" value="Open" onclick="cb1()">
<script type="text/javascript">
function cb1() {
setTimeout(wo, 1000); //simple async
}
function wo()
{
var a = window.open("http://google.com", "w2");
a.focus();
}
</script>
(lol, das ist meine Antwort für Öffnen Sie eine URL in einem neuen tab (und nicht in einem neuen Fenster) mit JavaScript).
Wie kann ich das öffnen im tab (browser Standardeinstellung) hier?
- Welche browser unterstützt dieses Verhalten auftreten?
- Hoffentlich ist das Ihr Antwort.
- alle Browser. test-Seite <!DOCTYPE html> <html> <head> <script type="text/javascript"> var i=0; function OnCallback() { openWin('google.com','win'+(i++)); } function test(callback) { setTimeout(callback, 3000); } function openWin(url, cpt) { var a = window.open(url, cpt); ein.focus(); } </script> </head> <body> <body> <input type="button" value="Open" onclick="test(OnCallback);"> </body> </body> </html>
- Singh, alle Browser-Konfigurationen korrekt sind (tab standardmäßig aktiviert und nicht blockiert popup-Fenster). Und alle sind gut, wenn ich anrufen, wo() direkt <input type="button" value="Open" onclick="wo()">.
- Haben Sie versucht, diese var a = Fenster.open(url, '_blank');
- Singh, brauche ich hier den Namen (nur ein tab).
- Ich habe versucht, deinen code selbst, öffnet sich ein tab-Fenster nicht.
- PARDON, ich habe Opera 16 und Google Chrome 29 (Ziel-Browsern). Problem nur hier.
- ein.focus(); funktioniert nicht überall
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liefen wir über das gleiche problem und gejagt wird, um SO für eine Antwort. Was wir arbeiten in unseren Umständen und der destillierten Weisheit ist wie folgt:
Das problem mit pop-up-Blocker verhindern die programmatischen Fenster öffnet. Browser ermöglichen es öffnet sich das Fenster vom tatsächlichen user-Klicks, die auftreten, auf dem Haupt-thread. Ebenso, wenn Sie Anruf-Fenster.öffnen Sie auf dem Haupt-thread wird es funktionieren, wie oben erwähnt. Nach dieser Antwort auf Öffnen Sie eine URL in einem neuen tab (und nicht in einem neuen Fenster) mit JavaScript, wenn Sie einen Ajax-Aufruf und wollen, um das Fenster zu öffnen, auf Erfolg zu setzen müssen Sie
async: false
das funktioniert, weil, die halten alles auf dem Haupt-thread.Wir nicht kontrollieren konnten unsere Ajax-Aufruf, aber eine andere Lösung gefunden, die funktioniert, weil der den gleichen Gründen. Achtung, es ist ein bisschen hacky und eignet sich möglicherweise nicht für Sie angesichts Ihrer Einschränkungen. Mit freundlicher Genehmigung von einem Kommentar auf eine andere Antwort auf Öffnen Sie eine URL in einem neuen tab (und nicht in einem neuen Fenster) mit JavaScript öffnen Sie das Fenster vor dem Aufruf
setTimeout
und aktualisieren Sie es dann in der verzögerten Funktion. Es gibt ein paar Möglichkeiten, dies zu tun. Entweder halten eine Referenz auf das Fenster, wenn Sie es öffnen,w = window.open...
- und set -w.location
oder öffnen Sie mit einem Ziel,window.open('', 'target_name')
, in der verzögerten Funktion öffnen in das Zielwindow.open('your-url', 'target_name')
, und verlassen Sie sich auf die browser halten die Referenz.Natürlich, wenn der Nutzer seine Einstellungen zu öffnen von links in einem neuen Fenster, dieses ist nicht zu ändern, aber das war kein problem für die OP.
Wenn ein neues Fenster geöffnet wird als eine neue Registerkarte oder eine neue Instanz, abhängig von der Benutzer-Einstellungen.
Wie die anderen posts erwähnt, der beste Weg, dies zu tun ist, um zuerst das Fenster öffnen, und legen Sie dann seine Position nach dem Rückruf oder asynchrone Funktion
Alternativ, wenn Sie mit async await Sie haben auch das gleiche problem. Die gleiche Lösung gilt noch immer.
Eine weitere Verbesserung ist, das Fenster zu öffnen, die auf einer ersten Seite mit einem kurzen feedback-entweder durch laden einer url oder schriftlich einige html-Seite
Dadurch wird verhindert, dass ein Benutzer auf der Suche auf einen leeren tab/Fenster wie lange es dauert, um Ihrer URL.