webentwicklung-frage-antwort-db.com.de

Wie verwende ich target in location.href

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. 

16
user1084509

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.

12
T.J. Crowder

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();
25
qiao

Sie können dies für jedes Element verwenden, bei dem onclick funktioniert:

onclick="window.open('some.htm','_blank');"

12
jojo

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.

3
Milos

Sie könnten dies versuchen:

        <script type="text/javascript">
         function newWindow(url){
                window.open(url);
            }
        </script>

Und rufen Sie die Funktion auf

3
bobbiloo

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;
2
cheeken
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a>
0
Paulo

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).

jsFiddle

0
Maël Nison

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

0
box86rowh