Newsgroup: it.comp.lang.javascript
Titolo: Problema con Firefox e anche con Safari (per WIN)

Buongiorno a tutti!
Ho perso un sacco di tempo inutilmente su questo problema.
Vorrei mostrare un video che l'utente sceglie da una combobox.
Il codice che ho scritto funziona perfettamente su IE, e risulta validato
W3C.
Però su FF e Safari non va.
Per individuare il problema ho scarnificato la mia pagina come segue,
sostituendo alla combobox un pulsante: la pagina si carica con il file
"video_A.wmv" e premendo il bottone dovrebbe visualizzare il file
"video_B.wmv".
Con IE tutto ok; nulla di fatto con gli altri 2.
Evidentemente i mozilla's sons non obbediscono al cambio del parametro
filename.
Ecco il codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script language="JavaScript" type="text/javascript">
function cambia() {
document.getElementById("player").filename="video_B.wmv";
}
</script>
<title>Prova video</title>
</head>
<body>
<object id="player" width="400" height="328" data="video_A.wmv"
type="video/x-ms-wmv">
<param name="filename" value="video_A.wmv">
</object>
<br>
<input type="submit" onClicK="cambia()" value="Cambia video">
</body>
</html>
Per scrupolo ho riprovato a modificare la pagina subordinando al pulsante il
cambio di altri parametri (statusbar, ecc,), ma pare che questi browser non
prendano comandi javascript, ad eccezione per le dimensioni:
questo codice, che dimezza le dimensioni del player, funziona dappertutto,
ma non serve a niente!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script language="JavaScript" type="text/javascript">
function cambia() {
document.getElementById("player").width="200";
document.getElementById("player").height="164";
}
</script>
<title>Prova video</title>
</head>
<body>
<object id="player" width="400" height="328" data="video_A.wmv"
type="video/x-ms-wmv">
<param name="FileName" value="Desi.wmv">
<br>
<input type="submit" onClicK="cambia()" value="Cambia video">
</body>
</body>
</html>
Qualcuno sa aiutarmi?
prospero
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 document.getElementById("player").filename="video_B.wmv";
prova ad usare .data invece di .filename


Funziona su firefox, a condizione di eliminare questa riga:
<param name="FileName" value="video_A.wmv">
Perň IE sballa completamente: mi rammenta due volte dei pericoli degli
ActiveX e apre il media player fuori della pagina.
Poco male, posso differenziare i codici in relazione ai browser.
Ma Safari non mostra piů nemmeno il primo video.
Booooooooh?
Ho provato anche a cambiare i video in mpeg, ma FF mi fa i capricci anche
con quicktime.
Ho girato su vari siti, ma la riproduzione cross browser dei video mi pare
problematica per tutti...
Che ne pensate?


 problematica per tutti...
Ti propongo una soluzione che funziona bene, ma devi usare jquery ed
un suo plugin
prima di tutto scarica jquery.js presso 
http://jquery.com/
il plugin jquery.media.js presso 
http://malsup.com/jquery/media/
 qui
troverai anche il file mediaplayer.swf
quindi prova il seguente e vedrai che cambierai idea:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script src="jquery.js" type="text/javascript"></script>
<script src="jquery.media.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
$(function() {
$('option').click(function (){
var scelta = $(this).val();
$('#media').attr("href",scelta);
$('#media').media({width: 400, height: 400, autoplay: true});
});
});
</script>
<title>Prova video</title>
</head>
<body>
<select>
<option value ="video_A.wmv">video_A.wmv</option>
<option value ="video_B.wmv">video_B.wmv</option>
</select>
<br />
<br />
<a id="media"></a>
</body>
</html>


Gentile Oreste, ti ringrazio.
Avevo già addocchiato jquery, ma ne rinviavo lo studio. Ora, dopo la tua
risposta, mi sono dato una smossa.
Ciò che hai postato funziona perfettamente su FF, e mi pare che si possa
manipolare alquanto l'oggetto player (che è una delle mie priorità). Però su
IE e Safari non ottengo alcuna risposta.
Mi pare quindi di essere ancora lontano dal codice unico, valido per tutti i
navigatori.
D'altra parte, anche la demo di jquery
(
http://malsup.com/jquery/media/video.html
) fornisce risultati differenti,
se aperta con i tre browser che sto usando, tutti per windows. Testerò a
breve anche Konqueror.
Ho la sensazione che risparmierò tempo rassegnandomi a differenziare il
codice per ogni browser, affidandolo a moduli esterni per non appesantire la
pagina principale.
ProsperoEf (modifico il nick perché ho visto che c'è un altro prospero in
giro...)


 (
http://malsup.com/jquery/media/video.html
) fornisce risultati differenti,
Su FF2, IE7 e Chrome lo vedo uguale.


Invece io ho queste risposte:
IE 7.0.5
Player tutti centrati
Tutti i video sono visualizzati correttamente, tranne "SWF with FLV" e AVI.
FF 3.0.3
Alcuni player restano centrati, altri sono a sx
Non si visualizzano: MOV, "SWF with FLV", AVI, MPG e 3G2.
Safari 3.1.1
Alcuni player restano centrati, altri sono a sx
Non si visualizzano: "SWF with FLV", WMV e AVI.
Avviando il player RAM, addirittura, il browser va in crash.
... e con altri s.o. come andrà?
ProsperoEf


 ... e con altri s.o. come andrà?
Il posizionamento potremmo risolverlo modificando il plugin jquery,
credo sia utile, magari riusciamo a creare un nuovo plugin con
maggiore grado di compatibilità cross-browser, il che non sarebbe
male. Ne ho provati altri, ma questo mi sembra il migliore perché
seleziona automaticamente il tipo di media. Una bella comodità ed un
risparmio di tempo.
Non capisco "SWF with FLV", il file dovrebbe essere flv, mentre file
swf sono un tramite per osservare gli flv.
La mancata visualizzazione su FF3 e Safari non sarà dovuta all'assenza
di plugin specifici?


Caro Oreste,
la questione dei comandi js in ff è affrontata nell'info del sito mozilla: è
detto esplicitamente che, per una loro scelta di sicurezza legata alla
potenziale pericolosità dell'apertura agli activex, il plug-in wmp non
prevede un'interazione in fase di esecuzione del codice (e a me
personalmente appare limuitata anche la possibilità di manipolare il player
in fase di caricamento).
Come ho imparato in questo 3d, jquery è una fantastica soluzione per le
applicazioni multimediali, ma non ricrea le condizioni di agire come su ie.
Per economia di progettazione, di spazio e di architettura della pagina, ho
trovato preferibile allocare il codice di gestione del player su vari file
.js intitolati ai browser testati e richiamati condizionalmente dopo aver
individuato il navigatore in uso.
Questo mi permette, oltre che di superare le incompatibilità (cross-browser
adieu!):
1) di fare manutenzione mirata sul singolo browser;
2) di gestire in modo modulare la questione, aggiungendo un "else if" e un
.js in caso di necessità di estendere le funzionalità della pagina a "nuovi"
browser o a versioni successive incompatibili con le precedenti (e in teoria
di fare anche re-grade).
Forse sembra eccessivo, però non è solo questione di eseguire un video: il
mio obiettivo, lo sottolineo, è quello di avere un oggetto player
sufficientemente manipolabile nei suoi parametri in relazione al contesto
creato dall'utente (ridotto, allargato, nascosto, mostrato, startato,
interootto, ecc.).
In sostanza, sono consapevole che javascript ha i suoi limiti, ma sono
convinto che con la fantasia, lo studio e la creatività, molti limiti si
superano (o si aggirano).


 individuato il navigatore in uso.
Mi sembra un'ottima soluzione, vorrei aggiungere che, studiando i
codici, si possono creare delle variabili globali comuni a tutti i
file .js così da poter manipolare i parametri essenziali, quali
dimensioni, autoplay, ecc..
Io per il momento risolvo il problema usando Google Video e Youtube,
non ho ancora la necessità di creare qualcosa "ad hoc". Mi pare di
capire che Google Video e Youtube non diano particolari problemi a
seconda del browser usato, in questo caso la scelta vincente è quella
di un adeguato oggetto swf che i due servizi mettono a disposizione.
Uso il plugin jQuery per applicazioni locali, dove FF2 viene imposto
come elemento dell'applicazione. Ho creato un database di film
estratti da DVD per evitare la manualità imposta dal DVD. Funziona
molto bene.

 ...
Gentile Oreste, hai ragione...credo che sia un formato che farà molta
strada... anche perché chi non ha ancora accettato lo standard, lo farà.
Mi sto accorgendo che la mia idea ha i suoi pregi e i suoi difetti, ed
onestamente, i difetti stanno prendendo il sopravvento: il pregio è la
modularità: la mia galleria video si apre con un filmato introduttivo ed
espone i titoli disponibili in una combobox, popolata da un array che
contiene anche il nome del file (senza estensione) ed il commento del
filmato.
Esiste, come ho descritto nell'apertura di questo 3d, un segmento di
incompatibilità tra browser.
IE richiede questo codice:
function change() {
current = document.slideform.slide.selectedIndex;
document.getElementById("player").url=MATRICE[0][current]+"wmv";
document.slideform.Commento.value=MATRICE[2][current];
}
document.write("<object id=\"player\" width=\"352\" height=\"288\"
CLASSID=\"CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6\"
type=\"video\/x-ms-wmv\">");
document.write("<param name=\"url\" value=\"Video.wmv\">");
document.write("<param name=\"autostart\" value=\"true\">");
document.write("<\/object>");
Per fare le stesse cose, FF vuole:
function change() {
current = document.slideform.slide.selectedIndex;
document.getElementById("player").data=MATRICE[0][current]+"wmv";
document.slideform.Commento.value=MATRICE[2][current];
}
document.write("<object id=\"player\" width=\"352\" height=\"288\"
data=\"Video.wmv\" type=\"video\/x-ms-wmv\">");
document.write("<param name=\"autostart\" value=\"1\">");
document.write("<\/object>");
Invece Safari, con WMP è ingestibile, e perciò ho duplicato in filmati in
QT, e il codice è così:
function change() {
current = document.slideform.slide.selectedIndex;
document.pla.SetURL(MATRICE[0][current]+"mov");
document.slideform.Commento.value=MATRICE[2][current];
}
document.write("<object
classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"
codebase=\"http:\/\/
www.apple.com
\/qtactivex\/qtplugin.cab\" width=\"400\"
height=\"300\" id=\"pla\"><param name=\"src\" value=\"Video.mov\"><embed
width=\"400\" eight=\"300\" src=\"Video.mov\" type=\"video/quicktime\"
pluginspace=\"
www.apple.com
\/quicktime\/download\" EnableJavaScript=\"true\"
name=\"pla\" bgcolor=\"black\" controller=\"false\"><\/embed><\/object>");
Mi è venuta voglia di vedere Linux, che, ovviamente (Konqueror di Kubuntu
6.10, di circa 2 anni fa), si fa un baffo di tutto e vuole .ogg oppure
.mpeg.
Beh, ogg è molto leggero, più di mpeg, ma ambedue, senza plug-in, sui primi
3 non vanno. Allora triplicherò i filmati in ogg solo per gli utenti Linux,
oltre ad aggiungere il file .js per Konqueror.
Adesso sono in una specie di imbuto, perché ogni nuovo filmato diventa 3
file... e non ho ancora affrontato Mac, del quale non so un tubo.
La mia pretesa di usare per ogni browser il player di default senza plug-in
strani sta diventando costosa, in termini di spazio server e di
programmazione.
Mi sono fermato, allora, per valutare un diverso formato, ma così torno al
punto di partenza.
Uffa che palle!!!
