2015-04-04 12 views
12

Su this website, la navigazione top della fisarmonica contiene un elemento chiamato "Foundation": (screenshot).con target = "_ blank" non si apre in una nuova scheda in Chrome

Questo elemento è prodotta da codice HTML:

<a href="http://www.foracure.org.au" target="_blank" style="width: 105px;"></a> 

Tuttavia, in Chrome, quando si fa clic su questo elemento, il nuovo sito non si apre in una nuova scheda.

Potete dirmi perché? Grazie.

+0

funziona per me come previsto, l'obiettivo viene aperto in una nuova scheda. – arkascha

+0

Grazie @arkascha. Ho modificato la domanda per indicare che il problema si verifica in Chrome. – Steve

+0

Sto usando un browser chromium. Per me va bene. Quindi a quanto pare è un effetto di qualunque cosa google aggiunga al bel browser chromium per la sua versione cromata. – arkascha

risposta

0

La sintassi per l'attributo target è corretta, ma i browser non devono onorarlo. Possono interpretarlo come l'apertura della destinazione in una nuova scheda piuttosto che in una nuova finestra, oppure possono ignorare completamente l'attributo. I browser hanno impostazioni per tali problemi. Inoltre, l'apertura di nuove finestre può essere impedita dai plugin del browser (tipicamente progettati per prevenire fastidiose pubblicità).

C'è poco che puoi fare di questo come autore. Potresti considerare l'apertura di una nuova finestra con JavaScript, cfr. alla risposta accettata a target = "_ blank" non funziona in firefox ?, ma i browser potrebbero essere ancora più riluttanti a lasciare che le pagine aprano nuove finestre in quel modo piuttosto che via target.

target="_blank" is not working in firefox?

8

Poiché JavaScript gestisce l'evento click. Quando si fa clic, il seguente codice si chiama:

el.addEvent('click', function(e){ 
    if(obj.options.onOpen){ 
     new Event(e).stop(); 
     if(obj.options.open == i){ 
      obj.options.open = null; 
      obj.options.onClose(this.href, i); 
     }else{ 
      obj.options.open = i; 
      obj.options.onOpen(this.href, i); 
     } 
    }  
}) 

Il onOpen cambia manualmente il location.

Edit: Per quanto riguarda il tuo commento ... Se è possibile modificare ImageMenu.js, si potrebbe aggiornare lo script che chiama onClose passare l'oggetto a elemento (this, piuttosto che this.href)

obj.options.onClose(this, i); 

Poi l'aggiornamento dell'istanza ImageMenu, con la seguente onOpen cambiamento:

window.addEvent('domready', function(){ 
    var myMenu = new ImageMenu($$('#imageMenu a'), { 
     openWidth: 310, 
     border: 2, 
     onOpen: function(e, i) { 
      if (e.target === '_blank') { 
       window.open(e.href);  
      } else { 
       location = e.href; 
      } 
     } 
    }); 
}); 

Ciò verificare la proprietà target dell'elemento per vedere se è _blank e quindi chiamare window.open, se trovato.

Se si preferisce non modificare ImageMenu.js, un'altra opzione potrebbe essere quella di modificare i collegamenti per identificarli nel gestore onOpen. Di 'qualcosa di simile:

<a href="http://www.foracure.org.au/#_b=1" target="_blank" style="width: 105px;"></a> 

Quindi, aggiornare il onOpen chiamata a:

onOpen: function(e, i) { 
    if (e.indexOf('_b=1') > -1) { 
     window.open(e); 
    } else { 
     location = e; 
    } 
} 

L'unico aspetto negativo di questo è l'utente vede l'hash al passaggio del mouse.

Infine, se il numero di collegamenti che si intende aprire in una nuova finestra è basso, è possibile creare una mappa e confrontarla. Qualcosa di simile:

var linksThatOpenInANewWindow = { 
    'http://www.foracure.org.au': 1 
}; 

onOpen: function(e, i) { 
    if (linksThatOpenInANewWindow[e] === 1) { 
     window.open(e); 
    } else { 
     location = e 
    } 
} 

L'unico inconveniente è la manutenzione, a seconda del numero di collegamenti ....

Altri hanno suggerito di modificare il link (usando # o javascript:) e l'aggiunta di un gestore di eventi in linea (onclick) - Non lo consiglio a tutti come si rompe collegamenti quando JS è disattivato/non supportata.

Buona fortuna!

+0

Grazie Jack. È possibile modificare questo JavaScript per aprire il link in una nuova scheda? Se é cosi, come? – Steve

+1

Ehi @Steve - Ho modificato la mia risposta per includere alcune soluzioni. Spero che aiutano! :) – Jack

7

nel codice e funzionerà in Chrome e altri browser.

Grazie Anurag

+1

Funzionerà. Tuttavia, come citato da Jack, questo si interromperà se javascript non è supportato. MDN suggerisce di non usarlo mai e fornisce diverse ragioni. Spero che questo aiuti: https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Never_use_this_form_of_code_for_links_%3Ca_hrefjavascriptwindow.open(...)_...%3E – sdw

+0

Questo non è un buon sostituzione in quanto ciò potrebbe ostacolare la scansione di questi collegamenti – maverick

3

per qualche motivo non sta funzionando in modo che possiamo farlo in un altro modo

sufficiente rimuovere la linea e aggiungere questo: -

<a onclick="window.open ('http://www.foracure.org.au', ''); return false" href="javascript:void(0);"></a> 

Buona fortuna.

-2

Se si utilizza Reagire questo dovrebbe funzionare:

<a href="#" onClick={()=>window.open("https://...")}</a>

+2

L'OP chiedeva specificamente il comportamento di target = "_ blank" impostazione dell'elemento di collegamento. L'introduzione di React (o qualsiasi Javascript) non è super rilevante per la domanda. – hraynaud

Problemi correlati