Hi again,
ich bette auf meiner Seite mit Hilfe des Google-SWF-Objects eine Flashdatei ein. Sobald ich auf dieses Objekt und damit auf die Flash-Datei klicke, kommuniziert das Flash mit dem JavaScript, um ein Drag&Drop des Objekt zu ermöglichen. Allerdings funktioniert das nur unter Mac OS X einwandfrei: In den selben Browsern unter Windows XP, 2000 und Vista (Firefox 3.0.7, Safari Beta 4, Opera 9.5) wird die Mausbewegung erst dann verfolgt, wenn ich aufhöre, die Maus auf dem Flash gedrückt zu halten. Im Klartext: Ich klicke auf das Objekt um es draggen zu können und unter Windows wird die drag-Funktion nicht aufgerufen.
Die Codes:
function startDraggingInJavascript (object,xposition,yposition) {
gesamtpositiony = parseInt(document.getElementById(object).offsetTop) - parseInt(window.pageYOffset) + yposition;
gesamtpositionx = parseInt(document.getElementById(object).offsetLeft) - parseInt(window.pageXOffset) + xposition;
function drag (ereignis) {
alert("geht");
if (display == 0) {
idname = "artikellayoutbildanfasser0" + dragobject.id;
while (document.getElementById(idname) != null) {
document.getElementById(idname).parentNode.removeChild(document.getElementById(idname).parentNode.lastChild);
}
display = 1;
}
ereignis = ereignis ? ereignis : window.event;
posx = ereignis.clientX;
posy = ereignis.clientY;
marginx = parseInt(dragobject.style.left);
marginy = parseInt(dragobject.style.top);
if (altesmarginx < 15) {
dragobject.style.left = "0px";
altesmarginx = altesmarginx + (posx - dragx);
}
else if (altesmarginx > (gesamtebreite - 15 - dragobject.offsetWidth)) {
dragobject.style.left = gesamtebreite - dragobject.offsetWidth + "px";
altesmarginx = altesmarginx + (posx - dragx);
}
else if (altesmarginx > (gesamtebreite - dragobject.offsetWidth) / 2 - 8 && altesmarginx < (gesamtebreite - dragobject.offsetWidth) / 2 + 8) {
dragobject.style.left = (gesamtebreite - dragobject.offsetWidth) / 2 + "px";
altesmarginx = altesmarginx + (posx - dragx);
}
else {
dragobject.style.left = altesmarginx + (posx - dragx) + "px";
altesmarginx = parseInt(dragobject.style.left);
}
dragobject.style.top = marginy + (posy - dragy) + "px";
dragx = ereignis.clientX;
dragy = ereignis.clientY;
return false;
}
function dragstop () {
alert("läuft");
marginx = parseInt(dragobject.style.left);
marginy = parseInt(dragobject.style.top);
display = 0;
//bildaktivieren(dragobject);
document.onmousemove = null;
dragobject.onmouseup = null;
dragobject = null;
}
function dragstartinit (x,y,objekt) {
dragobject = objekt;
dragx = x;
dragy = y;
marginx = parseInt(dragobject.style.left);
marginy = parseInt(dragobject.style.top);
altesmarginx = parseInt(dragobject.style.left);
altesmarginy = parseInt(dragobject.style.top);
document.onmousemove = drag;
dragobject.onmouseup = dragstop;
return false;
}
und das Flash:
//System.security.allowDomain("http://youtube.com","http://www.youtube.com/swf/cl.swf?enablejsapi=1", "http://www.youtube.com/swf/apiplayer.swf","http://youtube.com/apiplayer?enablejsapi=1");
import flash.external.*;
var javascriptFunction:String = "sendDataToFlash";
var realFunction:Function = getDataFromJavascript;
var id:String = "";
var checkloadingstatus = "";
var checkytplayerstatus = "";
function getDataFromJavascript (datajavascript:String, typ:String) {
[...]
}
var succes:Boolean = ExternalInterface.addCallback(javascriptFunction,this,realFunction);
// create a MovieClip to load the player into
var ytplayer:MovieClip = _root.createEmptyMovieClip("ytplayer", 1);
// create a listener object for the MovieClipLoader to use
var ytPlayerLoaderListener:Object = {
onLoadInit: function() {
// When the player clip first loads, we start an interval to
// check for when the player is ready
loadInterval = setInterval(checkPlayerLoaded, 250);
}
};
var loadInterval:Number;
function checkPlayerLoaded():Void {
//trace("das tracen geht aber");
// once the player is ready, we can subscribe to events, or in the case of
// the chromeless player, we could load videos
if (ytplayer.isPlayerLoaded()) {
ytplayer.setSize(480,295);
ytplayer.addEventListener("onStateChange", onPlayerStateChange);
ytplayer.addEventListener("onError", onPlayerError);
ytplayer.onMouseUp = onEnablestatusbar;
ytplayer.onMouseDown = startdragging;
setJavascriptToBegin();
//TestAusgabe.text = "dat geht";
//ytplayer.addEventListener("click", onEnablestatusbar);
clearInterval(loadInterval);
}
}
function onPlayerStateChange(newState:Number) {
trace("New player state: "+ newState);
}
function onPlayerError(errorCode:Number) {
trace("An error occurred: "+ errorCode);
}
function onEnablestatusbar ():Void {
var enable:Object = ExternalInterface.call("receiveFromFlash",id,"id").toString();
}
function startdragging ():Void {
var xpos = _xmouse;
var ypos = _ymouse;
var dragging:Object = ExternalInterface.call("startDraggingInJavascript",id,xpos,ypos).toString();
}
function setJavascriptToBegin ():Void {
var enable2:Object = ExternalInterface.call("setjavascripttobeready","ready").toString();
}
// create a MovieClipLoader to handle the loading of the player
var ytPlayerLoader:MovieClipLoader = new MovieClipLoader();
ytPlayerLoader.addListener(ytPlayerLoaderListener);
// load the player
ytPlayerLoader.loadClip("http://www.youtube.com/apiplayer?enablejsapi=1", ytplayer);