Hai ragione, è il meta tag BASE. Questo è un problema con l'ultima versione di jQuery UI (1.9), ha funzionato con 1.8. Ci sono state molte modifiche all'API delle schede, ma non sembra che questo problema abbia causato questo problema finché non controlli il codice sorgente di jQuery.
- la base meta tag indica al browser di trasformare l'attributo href nelle schede (che si usa come riferimento per il contenuto schede) da hash + id a un URL completo (utilizzando il valore del tag BASE). Questo è il comportamento previsto.
- Le versioni precedenti dell'interfaccia utente Tabs tentavano di indovinare se l'href era realmente remoto o no, dividendo il valore della scheda href, quindi confrontandolo con l'attuale URL AND al tag BASE, quindi decidendo se effettivamente era Locale.
- L'ultima versione di jQuery non controlla il valore del tag BASE.
- Quindi, l'ultima versione, se utilizzata con il meta tag BASE, tenterà di caricare il contenuto della scheda utilizzando Ajax, ricaricandosi (o qualsiasi cosa sia nell'URL BASE).
Questo è ciò che jQuery UI schede utilizzate nella versione 1.8.24:
this.anchors.each(function(i, a) {
var href = $(a).attr("href");
// For dynamically created HTML that contains a hash as href IE < 8 expands
// such href to the full page url with hash and then misinterprets tab as ajax.
// Same consideration applies for an added tab with a fragment identifier
// since a[href=#fragment-identifier] does unexpectedly not match.
// Thus normalize href attribute...
var hrefBase = href.split("#")[ 0 ],
baseEl;
if (hrefBase && (hrefBase === location.toString().split("#")[ 0 ] ||
(baseEl = $("base")[ 0 ]) && hrefBase === baseEl.href)) {
href = a.hash;
a.href = href;
}
Questo è ciò che jQuery UI Tabs utilizza nella versione 1.9.2:
function isLocal(anchor) {
return anchor.hash.length > 1 &&
anchor.href.replace(rhash, "") ===
location.href.replace(rhash, "")
// support: Safari 5.1
// Safari 5.1 doesn't encode spaces in window.location
// but it does encode spaces from anchors (#8777)
.replace(/\s/g, "%20");
}
Il codice è organizzato in modo diverso a causa della vasta riscrittura del codice Tabs, ma è possibile ottenere l'idea (Il $ ("base") [0] è il valore del meta tag BASE).
Finora non ho trovato alcun modo di dire alle schede "questo è locale, non usare Ajax" usando le normali API delle schede. Quello che posso offrirti è quello che ho fatto per risolverlo rapidamente nel frattempo (mentre chiedo, ricontrollo e magari riempire un bug report): un hack.
function isLocal(anchor) {
return anchor.hash.length > 1 &&
((anchor.href.replace(rhash, "") === location.href.replace(rhash, "").replace(/\s/g, "%20")) ||
(anchor.href.replace(rhash, "") === $("base")[ 0 ].href));
}
Questa è la versione più recente più il controllo eseguito nella versione precedente.
In una copia non minificata della più recente interfaccia utente di jQuery, sostituire la funzione isLocal con quella. Quindi, riduci il file. Sostituisci la versione originale. Test.
Ha funzionato per me in Firefox (17.0.1) e Chromium (18.0.1025.168).
Lo svantaggio è che non è possibile utilizzare una copia di terze parti (da un CDN). Per me non è un problema dato che la maggior parte delle mie applicazioni sono utilizzate nelle intranet.
Se qualcuno trova una soluzione migliore o è a conoscenza di come farlo senza aver hackerato il codice dell'interfaccia utente jQuery, faccelo sapere.
AGGIORNAMENTO: Ho trovato questa segnalazione di errore (con diversi duplicati): http://bugs.jqueryui.com/ticket/7822 Sono stato tentato di aggiungere il mio commento ma sembra che gli sviluppatori di jQuery non "risolveranno" questo dato che considerano il problema altrove. Citazione dal bugtracker:
non vedo come questo non è banale per risolvere ...
Ecco il banale, implementazione PHP dinamico: 'http: //'. $ _SERVER ['HTTP_HOST']. $ _SERVER ['REQUEST_URI']. '#foo'.
È anche piuttosto semplice risolvere questo problema in JavaScript, ma non fornirò codice di esempio perché è il posto sbagliato da correggere e dovrebbe essere fortemente scoraggiato. Il comportamento dei collegamenti è chiaramente definito e coerente su tutti i browser. Non c'è assolutamente alcun motivo per cui le persone debbano utilizzare URL errati e quindi violare intorno a loro in JavaScript.
Infine, è importante notare che "risolvere" questo significherebbe infrangere il comportamento corretto per tutti coloro che usano correttamente. Tieni presente che questo problema è stato risolto perché le persone con URL corretti stavano eseguendo il bug reale esistente nel vecchio codice.
il tuo codice sembra perfetto ... stai facendo qualche altra chiamata ajax a questa pagina ?? – bipen
Mostra altro javascript in giro! – iappwebdev
ho appena terminato un test approfondito ed è stato il tag meta base che sta causando questo problema! sto usando le schede sulla mia homepage e si caricano bene ... sperando che qualcuno possa far luce, grazie. –