PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Javascript, CreateElement, setAttribute, Flash und IE9


daywalker4536
2012-01-09, 00:33:16
Hi Leute,

habe hier mal ein Problem bei dem ihr mir vielleicht weiterhelfen könnt.


function addPlayer()
{
var params = new Array();

params[0] = new Object();
params[0]["name"] = "movie";
params[0]["value"] = "player.swf";

params[1] = new Object();
params[1]["name"] = "wmode";
params[1]["value"] = "transparent";

params[2] = new Object();
params[2]["name"] = "flashvars";
params[2]["value"] = "blablablabla";

var player = document.createElement("object");

player.setAttribute("id","player");
player.setAttribute("type","application/x-shockwave-flash");
player.setAttribute("data","player.swf");

for (var i = 0; i < params.length; i++)
{
var param = document.createElement("param");

for (var x in params[i])
{
param.setAttribute(x,params[i][x]);
player.appendChild(param);
}
}

document.body.appendChild(player);
}

function removePlayer()
{
document.body.removeChild(player);
}


Das Problem ist das bei dem IE9 das Flash nicht geladen wird. Zeigt Film nicht geladen an. Firefox läuft. Jemand Rad?. Macht mich wahnsinnig.

LG

Schiebt es mal in -> Programmierung bitte

Mr_Karlo
2012-01-09, 15:56:07
Was passiert wenn du testweise das Object-Element direkt in die html Source einbindest und nicht nachträglich mit JavaScript hinzufügst? Funktionier es dann im IE?

robobimbo
2012-01-09, 21:35:50
function addPlayer() {
var params = [];
var player = document.createElement("object");
params[0] = {};
params[0].name = "movie";
params[0].value = "player.swf";

params[1] = {};
params[1].name = "wmode";
params[1].value = "transparent";

params[2] = {};
params[2].name = "flashvars";
params[2].value = "blablabla";

player.setAttribute("id", "player");
player.setAttribute("type", "application/x-shockwave-flash");
player.setAttribute("data", "player.swf");

for(var i = 0; i < params.length; i++) {
var param = document.createElement("param");
for(var x in params[i]) {
param.setAttribute(x, params[i][x]);
}
player.appendChild(param);
}
document.body.appendChild(player);
return player;
}

function removePlayer(player) {
document.body.removeChild(player);

}


var p = addPlayer(player);
// removePlayer(p);


Meine Meinung nach, hast Du einen Fehler im JS - und zwar das "player.appendChild(param);" - damit hängst Du den Node wiederholt in den DOM-Tree, obwohl du nur ein Attribut gesetzt hast. Solltest Du erst hinzufügen, wenn du alle Attribute für das Element gesetzt hast.

Und ansonsten - für das remove brauchst du natürliche eine Referenz auf den Player, das hätte so auch nicht funktioniert.

daywalker4536
2012-01-10, 01:35:14
Meine Meinung nach, hast Du einen Fehler im JS - und zwar das "player.appendChild(param);" - damit hängst Du den Node wiederholt in den DOM-Tree, obwohl du nur ein Attribut gesetzt hast. Solltest Du erst hinzufügen, wenn du alle Attribute für das Element gesetzt hast.

Und ansonsten - für das remove brauchst du natürliche eine Referenz auf den Player, das hätte so auch nicht funktioniert.

createElement -> setAttributes -> hinzufügen zu documentTree -> ist doch alles richtig :). Ah ich sehe gerade du hast einen fehlerhafte Kopie des Codes ^^.

Doch im Firefox funktioniert das tadelos so wie es sollte. Ist schon richtig so der Code. Habe mich noch einmal schlau gemacht. Ist ein Bug des IE. Man müsste einen Hack implizieren damit alles im IE funktioniert oder auf das swfobject (http://code.google.com/p/swfobject/) ausweichen.

Habe mich allerdings für was anderes entschieden da es ein Windows Sidebar Gadget wird und da nur der IE läuft.
function addPlayer()
{
var player = '<object id="player" type="application/x-shockwave-flash" data="player.swf"><param name="movie" value="player.swf"/><param name="wmode" value="transparent"/><param name="flashvars" value="blablabla"/></object>';

document.all.tags("img")[0].insertAdjacentHTML("AfterEnd",player);
playerAdded = true;
}

System.Gadget.settingsUI = "settings.html";
System.Gadget.onSettingsClosed = settingsClosed;

var playlist = null;
var playerAdded = false;

function loadSettings()
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile(System.Gadget.path + "\\\\settings.txt",1,false);
playlist = file.ReadLine();
file.Close();
fso = null;
}


Tut das was es soll. Kennt aber nur der IE :).

Voll cool und das ist das HTML-Document. Steht nichts drin hehe.
<html>
<head>
<title>xxxxxxxxx</title>
<link rel="stylesheet" type="text/css" href="gadget.css"/>
<script type="text/javascript" src="gadget.js"></script>
</head>
<body onload="startGadget();" onmousedown="df5j7df34nvg5();" onmouseout="xxxxxx" onmouseover="xxxxxxxxxxxxx"/>
</html>

daywalker4536
2012-01-10, 17:12:22
So fertig das war es dann mit diesem Fred ^^. Man kann echt alles mögliche an geilen Sachen machen. Wenn das Gadget jemand haben will soll mal eine PN an mich schicken ^^.

Version 1.0.0.0
http://www.abload.de/img/test2sbka.jpg