View Full Version : [Html/Javascript] Richiamo playlist in ordine casuale!
crazyboy92
07-07-2010, 07:56
Inizio premettendo che tutto quello che sto facendo, mi serve in locale e non server/client :)
detto questo ecco il mio problema:
io ho una pagina html con un object embed che richiama un file m3u (una playlist di canzoni). il problema è che ha sempre lo stesso ordine, e non trovando come si fa ad inserire il parametro "random" (se lo sapete rispondendo a questo abbiamo già risolto tantissimo!) ho pensato di risolvere tutto con un array di javascript.
Il problema è che non riesco a passargli le righe dal file m3u. (praticamente mi serve che ogni posizione dell array abbia al suo interno la 3° riga, poi la 6°, 9° e cosi via, perché è quella che contiene l indirizzo della canzone), dopodichè risolvo tutto con la funzione random..
qualcuno sa aiutarmi? vi prego sono due giorni che non concludo nnt
ecco qui il mio object
<object classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6"
type="application/x-oleobject" width="0" height="0"
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715"
standby="Loading Playst...">
<param name="url" value="H:\Documents and Settings\Utente\Desktop\Articolo 31.m3u">
<param name="autostart" value="true">
<param name="ShowStatusBar" value="false">
<param name="volume" value="100">
<param name="shuffle" value="true">
<param name="Random" value="true"> <!-- che non funziona -->
</object>
grazie 1000 in anticipo! :D
Perché l'hai messo sotto spoiler? :wtf:
Mettilo sotto [code] o [html], semmai.
Comunque, da JavaScript non puoi andare a leggere un file su disco. Puoi fare in maniera indiretta in due maniere:
- apri la lista dentro un elemento <iframe> e poi ne leggi il contenuto, ma questo lo puoi fare solo se effettivamente il browser te la visualizzasse come file di testo. Al limite, cambi l'estensione in .txt;
- tiri su un server http e recuperi la lista tramite AJAX.
crazyboy92
07-07-2010, 10:10
Si scusami, mi sono sbagliato, ora lo cambio!
il problema è che quello che sto creando non è destinato solo al mio pc, quella playlist è una prova, è destinato nella creazione di un gadget per windows vista/seven e la playlist sarà un file salvato dentro la cartella documenti.
la connessione a internet è esclusa, perchè deve funzionare anche quando non è connesso, quindi non so come risolvere..
non si puo' integrare la random dentro l object??
Si scusami, mi sono sbagliato, ora lo cambio!
il problema è che quello che sto creando non è destinato solo al mio pc, quella playlist è una prova, è destinato nella creazione di un gadget per windows vista/seven e la playlist sarà un file salvato dentro la cartella documenti.
la connessione a internet è esclusa, perchè deve funzionare anche quando non è connesso, quindi non so come risolvere..
non si puo' integrare la random dentro l object??Tirare su un server HTTP non implica la connessione ad Internet :read:
Rinominare il file in .txt e usare l'<iframe> nascosto pare brutto?
Per la riproduzione casuale non ti so aiutare, cerca bene in rete.
crazyboy92
07-07-2010, 10:25
Tirare su un server HTTP non implica la connessione ad Internet :read:
Rinominare il file in .txt e usare l'<iframe> nascosto pare brutto?
Per la riproduzione casuale non ti so aiutare, cerca bene in rete.
nono, anzi! ma è che non ho capito cosa ci devo fare con l iframe.. cioè, una volta che ho questo iframe con la playlist dentro cosa ci faccio?!
nono, anzi! ma è che non ho capito cosa ci devo fare con l iframe.. cioè, una volta che ho questo iframe con la playlist dentro cosa ci faccio?!Vai a leggerne il contenuto.
Così:
var iframe = document.getElementsByTagName("iframe")[0];
var lista = iframe.contentWindow.document.body.innerHTML;
Dovrebbe andare sia con IE che con FF... Non so gli altri.
crazyboy92
07-07-2010, 10:32
Vai a leggerne il contenuto.
Così:
var iframe = document.getElementsByTagName("iframe")[0];
var lista = iframe.contentWindow.document.body.innerHTML;
Dovrebbe andare sia con IE che con FF... Non so gli altri.
ma il php non gira in locale..
ma il php non gira in locale..PHP? E che senso avrebbe? :confused:
Ma non riconosci che è JavaScript? :D Ho usato [php] solo perché è più adatto per la sintassi dei linguaggi C-like come JavaScript :D
crazyboy92
08-07-2010, 08:36
oddio scusa! come avrai capito sono un po' nuovo! speravamo di non doveri più scocciare, ma ho di nuovo bisogno di te (se hai voglia, tempo e pazienza!)
<object classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6"
type="application/x-oleobject" width="0" height="0"
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715"
standby="Loading Playst...">
<param name="url" value="H:\Documents and Settings\Utente\Desktop\Articolo 31.m3u">
<param name="autostart" value="true">
<param name="ShowStatusBar" value="false">
<param name="volume" value="100">
<param name="shuffle" value="true">
<param name="Random" value="true"> <!-- che non funziona -->
</object>
<iframe id="iframe" src="playlist.txt" width="0" height="0"></iframe>
<script language="javascript" type="text/javascript">
var iframe = document.getElementsByTagName("iframe")[0];
var lista = iframe.contentWindow.document.body.innerHTML;
</script>
e questa è la mia playlist.txt
#EXTM3U
#EXTINF:0,01-canzone1.mp3
..\Documenti\Musica\canzone1.mp3
#EXTINF:0,02-canzone2.mp3
..\Documenti\Musica\canzone2.mp3
#EXTINF:0,03-canzone3.mp3
..\Documenti\Musica\canzone3.mp3
è tutto giusto??
un altra domanda, quel [0] indica che si deve prendere la prima riga? perchè se cosi' fosse metto tutto dentro una for e risolvo almeno la storia della 3°riga
è tutto giusto??Quasi...
Lo script, messo così, potrebbe agire prima ancora che l'iframe venga inizializzato, cioè prima che possa aver completato il caricamento del file playlist.txt. In tal caso, potresti avere un'eccezione nel momento in cui cerchi di recuperare iframe.contentWindow.document.body.innerHTML.
Per risolvere la cosa, ti consiglio di creare una funzione che contenga quel pezzo di script, e di richiamarla tramite l'evento onload dell'iframe:
<iframe id="iframe" src="playlist.txt" style="display: none" onload="listaCarica()"></iframe>
<script type="text/javascript">
function listaCarica() {
var iframe = document.getElementsByTagName("iframe")[0];
var lista = iframe.contentWindow.document.body.innerHTML;
var righe = lista.split("\r\n");
// Segue quel che devi fare con le righe...
}
</script>
Nella variabile "righe" ora hai le righe del file (la prima potrebbe iniziare con "<pre>" e l'ultima finire con "</pre>", sono aggiunte che fa il browser per visualizzare il file di testo.
Nota:
- usare la proprietà di stile "display" è molto più pulito che mettere a 0 altezza e larghezza: se impari il web, impara anche i fogli di stile;
- la separazione delle righe potrebbe non funzionare a seconda del modo di andare a capo del file. Prova a sostituire "\r\n\" con "\n" e dovrebbe andare;
- mi sono accorto che Chrome rompe le balle con questioni di sicurezza :fagiano:, mentre IE, FF e Opera vanno bene.
un altra domanda, quel [0] indica che si deve prendere la prima riga?No, indica che si prende il primo elemento iframe (che in questo caso è anche l'unico) che si trova nella lista.
document.getElementsByTagName fornisce l'elenco degli elementi del documento aventi il tag specificato.
Per fare quello che dici, ti ho preparato la variabile righe.
Alle prima armi con JavaScript, eh? Sto scrivendo una guida, ma ci vorrà del tempo :help:
crazyboy92
08-07-2010, 10:20
Al momento purtroppo non posso usare il mio pc, comunque dandogli un occhiata, effettivamente, come hai scritto te ha più senso!
non so come ringraziarti! entro oggi pomeriggio lo provo e ti faccio sapere :D
ps. Saro' uno dei primi ad andarmi a leggere la tua guida!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.