2012-05-03 10 views
12

Ho provato diversi modi per modificare oggetti Flash/Embedded tramite Javascript e sembra funzionare in tutto tranne IE, quindi sto pensando di lanciare IE fuori dalla finestra per questa applicazione a meno che non ci siano versioni più vecchie + usate di altri browser che non consentono di modificare oggetti. Un esempio di questo potrebbe essere:IE è l'unico browser (o versione) che non consente la manipolazione di oggetti Flash?

document.getElementById(divID).innerHTML = '<object ...><embed ...><\/embed><\/object>'; 

o in jquery

var params = '<param name="allowFullScreen" value="true" />' + 
      '<param name="allowScriptAccess" value="always" />' + 
      '<param name="allowNetworking" value="all" />' + 
      '<param name="movie" value="player.swf" />' + 
$("#objectPlayer").html(params); 

Se tutto il resto dei browser moderni e le versioni più usate di essi supportano questo tipo di editing poi mi limiterò a scarto IE. E prima di ottenere un'inondazione di SWFObject JS Framework, non includerò un'enorme struttura per un browser che non credo possa contenere il mio profilo demografico.

JSFiddle

Ecco un link ad un JSFiddle ho creato. Funziona con tutti i browser, ma IE8

+0

Anche se non si desidera utilizzare SWFObject potrebbe essere interessante guardare il codice sorgente e vedere come soddisfare gli utenti IE8. Forse puoi usare la correzione/procedura che stanno usando senza dover aggiungere l'overhead aggiuntivo del caricamento dell'intera libreria? – m90

+0

basta cambiare src e il valore che contiene l'estensione .swf. – littlealien

+0

Penso che l'IE8 non ricaricherà il file SWF, quindi i tuoi nuovi parametri non arriveranno al film. Prova a cambiare anche l'src. – HerrSerker

risposta

8

Credo che la parte <param> del codice è per <object>.

È necessario passare le coppie nome/valore per embed.

$("#objectPlayer embed").attr({ 
    "src": "fileName.swf", 
    "name": "fileName", 
    "allowFullScreen": "true", 
    "width": 200, 
    "height": 100, 
    "type": "application/x-shockwave-flash" 

    //and so on... 
    }); 

Ma vorrei usare SWFObject in ogni caso, è lo standard del settore, è abbastanza robusto ed è il modo migliore per incorporare il flash sul sito web.

0

Se capisco la tua domanda e il tuo scopo di utilizzo, questo è quello che suggerirei.

Mi piacerebbe utilizzare SWFObject per incorporare il tuo SWF nella tua pagina HTML. Da lì in poi puoi passare a flashVars (oggetto in cui puoi impostare valori personalizzati) sul tuo SWF. Non è molto difficile implementarlo ed è più pulito nell'uso (secondo me). I valori di flashVars possono essere facilmente impostati con valori PHP o riempiti con valori semplici.

Dai un'occhiata alla this articolo per ulteriori informazioni su SWFObject e FlashVars e come utilizzarli in ActionScript 3.

+0

"E prima che si verifichi un'inondazione di SWFObject JS Framework, non includerò un'enorme infrastruttura per un browser che non credo possa contenere i miei dati demografici". ~ Ultimo paragrafo della mia domanda. –

0

Hmmm ... strano, il DOM non si aggiorna correttamente in IE8. Questo è un codice funzionante. E 'brutto e c'è un sacco di spazio per l'ottimizzazione:

<div id="player"> 
<a href="javascript: void(0)" onclick="build()">Click Me!</a><br /> 
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" type="application/x-shockwave-flash" id="twitchTV" width="600" height="368" style="margin:0px;padding:0px"> 

    <param name="movie" value="http://www.twitch.tv/widgets/live_embed_player.swf?channel=day9tv" /> 
    <param name="quality" value="high" /> 
    <param name="bgcolor" value="#ffffff" /> 
    <param name="allowFullScreen" value="true" /> 
    <param name="allowScriptAccess" value="always" /> 
    <param name="allowNetworking" value="all" /> 
     <embed src="http://www.twitch.tv/widgets/live_embed_player.swf?channel=day9tv" quality="high" bgcolor="#ffffff" width="600" height="368" 
    name="videoplayer" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> 
    </object>  

</div> 

JS:

function build(){ 
    // Usually the channels are vars, but this is simplified. 
    var data = 'http://www.twitch.tv/widgets/live_embed_player.swf?channel=lzgamertv'; // Object Data 
    var html = '<a href="javascript: void(0)" onclick="build()">Click Me!</a><br /><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" type="application/x-shockwave-flash" id="twitchTV" width="600" height="368" style="margin:0px;padding:0px"><param name="movie" value="'+data+'" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><embed src="'+data+'" quality="high" bgcolor="#ffffff" width="600" height="368" name="videoplayer" align="" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>'; 


    $("#player").html(""); 
    $("#player").append(html); 


} 

JSFiddle is here

0

Si può provare qualcosa di simile ...

http://jsfiddle.net/eH8cK/

Si può effettivamente riscrivere l'intero contenuto del lettore quando si è già riscrivendo quasi la maggior parte dei contenuti.

Si prega di provare e fammi sapere se funziona. Grazie

0

ho avuto questo davvero strano bug con IE8 in uno dei miei progetti, che era molto difficile da catturare - ha reso excanvas di Google non riescono, se sono stati aggiunti gli elementi di tela utilizzando la innerHTML invece di utilizzare il document.createElement/document.appendChild.

L'ho risolto prendendo tutti gli elementi canvas creati con lo innerHTML e li ho riorganizzati utilizzando il metodo createElement del DOM.

Ho notato problemi simili con altri elementi "interattivi" in IE8, quindi suggerirei di provarlo.

non ho IE8 per provarlo, ma qui, try it on jsfiddle

Problemi correlati