2012-01-20 13 views
15

Attualmente sto sviluppando un'applicazione web in cui ho bisogno per aprire una finestra pop-up per visualizzare un report. Il problema è che alcune versioni di Explorer non supportano la funzione javascript window.open, in modo che quando questo è il caso che cattura l'errore e aprire il nuovo URL con location.href. Ecco il codice:Come utilizzare bersaglio in location.href

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; 
} 

Il problema è che il location.target non funziona e mi piacerebbe sapere se c'è un modo per specificare la destinazione del location.href in modo che possa essere aperto in una nuova scheda.

risposta

12

Il problema è che alcune versioni di Explorer non supportano la window.open funzione javascript

dire che cosa? Potete fornire un riferimento per tale affermazione? Con rispetto, penso che tu debba sbagliare. This works su IE6 e IE9, ad esempio.

La maggior parte dei browser moderni non consente al proprio codice di utilizzare window.open tranne che in risposta diretta a un evento utente, al fine di mantenere i pop-up di spam e simili; forse è quello che stai pensando. Finché si utilizza solo window.open quando si risponde a un evento utente, si dovrebbe andare bene usando window.open   — con tutte le versioni di IE.

Non è possibile utilizzare location per aprire una nuova finestra. Proprio window.open o, naturalmente, l'utente cliccando su un link con target="_blank".

0

Perché non si dispone di un tag di ancoraggio nascosto nella pagina con il set di destinazione di cui si ha bisogno, quindi si simula facendo clic quando è necessario il pop-out?

How can I simulate a click to an anchor tag?

Questo potrebbe funzionare nei casi in cui il metodo window.open non ha funzionato

+0

Non oggi, ma ho usato questa tecnica in passato – box86rowh

+0

Devo dire che non lo sto comprando. Vuoi fare una demo? Di questo funziona, nei browser moderni, senza un evento utente? –

+0

http://jsfiddle.net/BHpMP/ – box86rowh

24

provare questo, che simula un clic su un ancoraggio.

var a = document.createElement('a'); 
a.href='http://www.google.com'; 
a.target = '_blank'; 
document.body.appendChild(a); 
a.click(); 
+1

Hai provato? Non funziona su Chrome, almeno. –

+0

@ T.J.Crowder Ho postato questa risposta dopo averlo provato su jsfiddle: http://jsfiddle.net/XLLEk/ e sta funzionando sulla mia macchina. Probabilmente hai impedito tutte le finestre popup del tuo browser, ecco perché non funziona nel tuo caso. Se è così, si prega di prendere in considerazione rimuovere il downvote, grazie. – qiao

+1

qiao: Non sai chi ha downvoted la tua risposta. Sai che ho commentato, e tu conosci qualcuno downvoted. Questo è tutto ciò che sai; fare ipotesi basate su questa è una cattiva idea. Per quanto riguarda la risposta: utilizzando le impostazioni predefinite su Chrome, IE9 e Firefox, tutti e tre bloccano il pop-up. Appropriatamente. Quindi non offre nulla in cima a 'window.open'. –

2

Se si utilizza un <a/> per attivare il report, è possibile provare questo approccio. Invece di tentare di generare una nuova finestra quando window.open() fallisce, impostare lo scenario predefinito per aprire una nuova finestra tramite target (e prevenirlo se window.open() ha esito positivo).

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; 
+0

Demo: http://jsfiddle.net/cheeken/pAGjF/ – cheeken

3

Si potrebbe provare questo:

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

e chiamare la funzione

+1

Non funziona in Chrome – Susan

0

A partire dal 2014, è possibile attivare il click su aTag. Tuttavia, per motivi di sicurezza, è necessario farlo in un gestore click evento, o il browser provvederà ad etichettarlo come un pop-up (alcuni altri eventi possono permettere di attivare in modo sicuro l'apertura).

jsFiddle

9

è possibile utilizzare questo su qualsiasi elemento in cui lavora onclick:

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

+0

La domanda non è come impostare un gestore, ma come impostare in modo programmatico il 'target' di un collegamento. Il tuo post non risponde a questa domanda. – amon

+0

Questo particolare post mi è stato molto utile in un pizzico +1. – ProfVersaggi

0
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a> 
3

Se si va con la soluzione @qiao, forse si vorrebbe rimuovere l'allegato figlio poiché la scheda rimane aperta e i clic successivi aggiungerebbero altri elementi al DOM.

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

Forse qualcuno potrebbe pubblicare un commento al suo posto, perché non posso.

+0

Funziona come un fascino! (con punto e virgola dopo ogni comando, ovviamente) –

Problemi correlati