2009-10-04 6 views
17

Ich weiß, dass viele diese Frage gestellt haben, aber ich denke meine Situation ist ein bisschen anders.Flash oben auf jQuery Dialog

Ich habe eine Website, wo ich einige Anzeigen habe, die Flash in einem wegen XHTML/HTML-Kompatibilitätsprobleme versteckt ist. Aber die Flash-Elemente sind über meinen jQuery-Dialogen, was nicht ideal ist.

Einige Lösungen haben vorgeschlagen, wmode undurchsichtig zu setzen, aber ich kann nicht, weil meine Anzeigen Skripte sind, die Flash-Elemente ausgeben.

Eine andere Lösung schlug vor, Anzeigen auszublenden, wenn ein Dialogfeld angezeigt wird. Meine Frage ist also: Gibt es eine Möglichkeit, Flash-Inhalte hinter meine jQuery-Dialoge zu stellen, während sie sichtbar sind und ohne den Flash-Code zu ändern?

Mit freundlichen Grüßen, Lasse Espeholt

Update: ich jetzt die Frage mit einer Prämie reopned haben. Momentan verberge ich jede Flash-Anzeige im "show dialog". Aber das ist immer noch keine optimale Lösung. Also suche ich nach einem Skript, das jede Flash-Animation undurchsichtig macht (eine jQuery-Lösung wäre am schönsten, aber eine einfache JavaScript-Lösung reicht aus). Oder wenn es sollte eine andere Lösung nicht in dieser Frage diskutiert, werde ich glücklich sein zu hören, über sie :)

Update 2: Bisher habe ich dieses Skript gemacht:

function opaqueAllFlashMovies() { 
    // Embed Flash movies 
    $('embed[wmode!="opaque"]').attr('wmode', 'opaque').wrap('<div>'); 

    // Object flash movies with a wmode param 
    $('object[classid$="-444553540000"] parem[wmode]').attr('value', 'opaque'); 
    // Object flash movies without a wmode param 
    $('object[classid$="-444553540000"]').not('param[wmode]').append('<param name=\'wmode\' value=\'opaque\'/>').wrap('<div>'); 
} 

Das funktioniert in FF und Chrome, aber nicht in IE. Anscheinend .append schlägt fehl. Irgendwelche Ideen?

Antwort

13

Sie können HTML nicht vor Flash platzieren, wenn Sie wmode nicht auf undurchsichtig (oder transparent) setzen.

Mit dem Standard-Wmode ("window") übernimmt der Flash Player das Rendering und die Benutzerinteraktion in seinem Bereich. Daher kann der Browser in diesem Bereich kein HTML anzeigen. Was wmode = "opaque" (oder wmode = "transparent") ist, dass es dieses Standardverhalten deaktiviert und den Flash Player-Bereich in das übliche Rendering und Layering des Browsers integriert.

Sie müssen jedoch keinen Flash-Inhalt ändern, um wmode festzulegen, da dies im HTML-Code erfolgt (oder über SWFObject oder ein anderes Skript, das das Flash-Objektelement einfügt), wenn Sie also die Kontrolle über die Skripts haben gibt Flash-Elemente aus, "die du erwähnst, du kannst dort auf die Einstellung von wmode achten.

+0

Ich habe keine Kontrolle über die Skripte. Sie werden zur Verfügung gestellt und können jede Sekunde ändern, wenn es sollte. Ich habe meine Skripte in "iframes" -Tags. Kann ich jQuery so einstellen, dass wmode in jedem Flash-Objekt einschließlich Flash-Objekten in "iframes" bearbeitet wird? –

+0

OK, das ist zu schlecht. Ich weiß nicht, ob Sie jQuery veranlassen könnten, den Flash-Objekt-HTML-Code im laufenden Betrieb zu ändern, aber wenn er nach dem Laden des Flashs geändert wird, kann es sein, dass ich den Flash neu lade, was dazu führt, dass jede Anzeige zweimal geladen wird. Das Ausblenden der Anzeigen, wenn ein Dialogfeld angezeigt wird, scheint die beste Lösung zu sein, denke ich. –

+0

Das ist, was ich jetzt getan habe, danke :) –

1

Wie wäre es, wmode manuell mit Javascript zu opak zu setzen, nachdem der Flash bereits geladen wurde?

+0

Siehe meinen Kommentar oben :) –

1

Ich habe gerade diesen Beitrag gelesen und versucht, den Parameter wmode = "opaque" in einem Objekt-Tag hinzuzufügen. Es funktioniert für IE 8. Es tut mir leid, wenn mein Beitrag zu spät ist.

+1

Ja, das funktioniert. Aber wie gesagt, ich brauche es für Anzeigen, bei denen ich das Skript nicht kontrollieren kann. –

2

Ich denke, ich habe eine Lösung. Unter Verwendung des jquery-ui Dialogs, verbrachte Stunden und Stunden, die versuchen, heraus zu erarbeiten - arbeitete für mich,

Logic war, wenn ich nicht die jquery machen kann, Frontseite gehen zu lassen, gehen alle Flash-Inhalt zurück. Die Forschung hat mich zu diesem Link geführt - endlich hat es funktioniert.

How do I programmatically set all <object>'s to have the wmode set to opaque?

function makeObjectsOpaque3() { 
    var elementToAppend = document.createElement('param'); 
    elementToAppend.setAttribute('name', 'wmode'); 
    elementToAppend.setAttribute('value', 'opaque'); 
    var objects = document.getElementsByTagName('object'); 
    for(var i = 0; i < objects.length; i++) { 
     var newObject = objects[i].cloneNode(true); 
     elementToAppend = elementToAppend.cloneNode(true); 
     newObject.appendChild(elementToAppend); 
     objects[i].parentNode.replaceChild(newObject, objects[i]); 
    } 
} 

window.onload = makeObjectsOpaque3; 

und

if(window.onload) { 
    var onLoad = window.onload; 
    window.onload = function() { 
     onLoad(); 
     makeObjectsOpaque3(); 
    }; 
} else { 
    window.onload = makeObjectsOpaque3; 
} 
+0

Hallo, hast du James auf derselben Seite kommentiert? Wenn es das nicht betrifft, werde ich sie alle nochmal ausprobieren :) –

0

Google-Suche für "iframe Scheibe". Wenn Sie einen iframe hinter den HTML-Code setzen, wird dieser über den Flash-Inhalt gebracht (ignorieren Sie die wmode-Einstellungen).

Bye bye

+0

kannst du bearbeiten um mehr details hinzuzufügen als "google suchen für?" – Will

+0

Dies ist eines der Ergebnisse: http://www.udm4.com/demos/extension-iframeshim.php. Sie können seinen Ansatz kopieren, um das Problem zu lösen ... – pincopallo