Ich entwickle zurzeit eine Webanwendung, in der ich ein Popup-Fenster öffnen muss, um einen Bericht anzuzeigen. Das Problem ist, dass einige Versionen des Explorers die window.open-Javascript-Funktion nicht unterstützen. Wenn dies der Fall ist, fange ich den Fehler und öffne die neue URL mit location.href. Hier der Code:
try {
window.open(url, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0")
} catch(e) {
location.target = "_blank";
location.href = url;
}
Das Problem ist, dass das location.target nicht funktioniert und ich würde gerne wissen, ob es eine Möglichkeit gibt, das Ziel der location.href anzugeben, damit es in einem neuen Tab geöffnet werden kann.
Das Problem ist, dass einige Versionen des Explorers die Javascript-Funktion window.open nicht unterstützen
Sag was? Können Sie eine Referenz für diese Aussage angeben? Mit Respekt denke ich, dass Sie sich irren müssen. Das funktioniert zum Beispiel auf IE6 und IE9.
Die meisten modernen Browser lassen Ihren Code window.open
nur in direkter Reaktion auf ein Benutzerereignis verwenden, um Spam-Popups und dergleichen in Schach zu halten. Vielleicht denken Sie daran. Solange Sie nur window.open
verwenden, wenn Sie auf ein Benutzerereignis antworten, sollten Sie window.open
verwenden - mit allen IE-Versionen.
location
kann nicht zum Öffnen eines neuen Fensters verwendet werden. Einfach window.open
oder natürlich der Benutzer, der mit target="_blank"
auf einen Link klickt.
versuchen Sie es mit diesem, das einen Klick auf einen Anker simuliert.
var a = document.createElement('a');
a.href='http://www.google.com';
a.target = '_blank';
document.body.appendChild(a);
a.click();
Sie können dies für jedes Element verwenden, bei dem onclick funktioniert:
onclick="window.open('some.htm','_blank');"
Wenn Sie mit der Lösung von @qiao gehen, möchten Sie möglicherweise das angehängte untergeordnete Kind entfernen, da die Registerkarte geöffnet bleibt und nachfolgende Klicks dem DOM weitere Elemente hinzufügen.
// Code by @qiao
var a = document.createElement('a')
a.href = 'http://www.google.com'
a.target = '_blank'
document.body.appendChild(a)
a.click()
// Added code
document.body.removeChild(a)
Vielleicht könnte jemand einen Kommentar zu seinem Beitrag posten, weil ich das nicht kann.
Sie könnten dies versuchen:
<script type="text/javascript">
function newWindow(url){
window.open(url);
}
</script>
Und rufen Sie die Funktion auf
Wenn Sie einen <a/>
verwenden, um den Bericht auszulösen, können Sie diesen Ansatz ausprobieren. Anstatt zu versuchen, ein neues Fenster zu erstellen, wenn window.open()
fehlschlägt, öffnen Sie das Standardszenario, um ein neues Fenster über target
zu öffnen (und verhindern Sie, dass window.open()
erfolgreich ist).
HTML
<a href="http://my/url" target="_blank" id="myLink">Link</a>
JS
var spawn = function (e) {
try {
window.open(this.href, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0")
e.preventDefault(); // Or: return false;
} catch(e) {
// Allow the default event handler to take place
}
}
document.getElementById("myLink").onclick = spawn;
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a>
Ab 2014 können Sie den Klick auf ein <a/>
-Tag auslösen. Aus Sicherheitsgründen müssen Sie dies jedoch in einem click
-Ereignishandler tun, oder der Browser kennzeichnet ihn als Popup-Fenster (einige andere Ereignisse können das Öffnen der Datei sicher auslösen).
Warum nicht auf der Seite ein verstecktes Ankertag mit dem gewünschten Zielsatz haben und dann das Anklicken simulieren, wenn der Pop-Out erforderlich ist?
Wie kann ich einen Klick zu einem Ankertag simulieren?
Dies würde in den Fällen funktionieren, in denen window.open nicht funktionierte