Mit Javascript möchte ich eine neue Seite auf einer anderen Registerkarte öffnen, mich aber weiterhin auf die aktuelle Registerkarte konzentrieren. Ich weiß, dass ich es so machen kann:
open('http://example.com/');
focus();
Wenn ich dies jedoch in Chrome mache, blinkt die neue Registerkarte für einen Moment, bevor zur aktuellen Registerkarte zurückgekehrt wird. Ich möchte das vermeiden.
Die Anwendung ist ein persönliches Lesezeichen, daher muss sie nur in der neuesten Version von Chrome funktionieren.
javascript
google-chrome
st-boost
quelle
quelle
Antworten:
UPDATE: Nach Version 41 von Google Chrome
initMouseEvent
schien sich das Verhalten geändert zu haben.Dies kann durch Simulieren von
ctrl
+click
(oder anderen Schlüssel- / Ereigniskombinationen, die eine Hintergrundregisterkarte öffnen) für ein dynamisch generiertesa
Element erfolgen, dessenhref
Attribut auf das gewünschte eingestellt isturl
In Aktion: Geige
function openNewBackgroundTab(){ var a = document.createElement("a"); a.href = "http://www.google.com/"; var evt = document.createEvent("MouseEvents"); //the tenth parameter of initMouseEvent sets ctrl key evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null); a.dispatchEvent(evt); }
nur auf Chrom getestet
quelle
a.target='_blank';
.MouseEvent('click', {view: window, ctrlKey: true, metaKey: true});
, stiehlt der neu geöffnete Tab immer noch den Fokus. Vermisse ich etwasTHX für diese Frage! Funktioniert gut für mich in allen gängigen Browsern:
function openNewBackgroundTab(){ var a = document.createElement("a"); a.href = window.location.pathname; var evt = document.createEvent("MouseEvents"); //the tenth parameter of initMouseEvent sets ctrl key evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null); a.dispatchEvent(evt); } var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; if(!is_chrome) { var url = window.location.pathname; var win = window.open(url, '_blank'); } else { openNewBackgroundTab(); }
quelle
Soweit ich mich erinnere, wird dies durch die Browsereinstellungen gesteuert. Mit anderen Worten: Der Benutzer kann wählen, ob er eine neue Registerkarte im Hintergrund oder im Vordergrund öffnen möchte. Sie können auch auswählen, ob ein neues Popup in einem neuen Tab geöffnet werden soll oder nur ... ein Popup.
Zum Beispiel in Firefox-Einstellungen:
Beachten Sie die letzte Option.
quelle
Ich habe auf sehr einfache Weise genau das getan, wonach Sie suchen. Es ist in Google Chrome und Opera perfekt flüssig und in Firefox und Safari nahezu perfekt. Nicht im IE getestet.
function newTab(url) { var tab=window.open(""); tab.document.write("<!DOCTYPE html><html>"+document.getElementsByTagName("html")[0].innerHTML+"</html>"); tab.document.close(); window.location.href=url; }
Geige: http://jsfiddle.net/tFCnA/show/
Erläuterungen:
Angenommen, es gibt die Fenster A1 und B1 sowie die Websites A2 und B2.
Anstatt B2 in B1 zu öffnen und dann zu A1 zurückzukehren, öffne ich B2 in A1 und öffne A2 in B1 erneut.
(Eine andere Sache, die es funktioniert, ist, dass ich den Benutzer nicht dazu bringe, A2 erneut herunterzuladen, siehe Zeile 4)
Das einzige, was Ihnen vielleicht nicht gefällt, ist, dass die neue Registerkarte vor der Hauptseite geöffnet wird.
quelle
Hier ist ein vollständiges Beispiel für das Navigieren in einer gültigen URL auf einer neuen Registerkarte mit Fokus.
HTML:
<div class="panel"> <p> Enter Url: <input type="text" id="txturl" name="txturl" size="30" class="weburl" /> <input type="button" id="btnopen" value="Open Url in New Tab" onclick="openURL();"/> </p> </div>
CSS:
.panel{ font-size:14px; } .panel input{ border:1px solid #333; }
JAVASCRIPT:
function isValidURL(url) { var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; if (RegExp.test(url)) { return true; } else { return false; } } function openURL() { var url = document.getElementById("txturl").value.trim(); if (isValidURL(url)) { var myWindow = window.open(url, '_blank'); myWindow.focus(); document.getElementById("txturl").value = ''; } else { alert("Please enter valid URL..!"); return false; } }
Ich habe auch einen Papierkorb mit der Lösung unter http://codebins.com/codes/home/4ldqpbw erstellt
quelle