2009-10-04 5 views
17

私は多くの人がこの質問をしていることを知っていますが、私の状況は少し違うと思います。jQueryダイアログの上のFlash

xhtml/htmlの互換性の問題のためにFlashが隠されている広告があるサイトがあります。しかし、フラッシュ要素は理想的ではない私のjQueryダイアログの上にあります。

一部のソリューションでは、wmodeを不透明に設定することを推奨していますが、広告がFlash要素を出力するスクリプトであるため、できません。

別の解決策は、ダイアログが表示されたときに広告を隠すことを提案しました。だから私の質問は:表示され、フラッシュコードを変更せずにjQueryのダイアログの後ろにフラッシュコンテンツを配置する方法はありますか?

敬具、 ラッセEspeholt

アップデート:私は今の恩恵で質問をreopnedいる 。今のところ、私はすべてのFlash広告を "show dialog"に隠しています。しかし、これはまだ最適な解決策ではありません。だから、私はすべてのFlashアニメーションを不透明にするスクリプトを探しています(jQueryソリューションはすばらしいですが、単純なJavaScriptソリューションでも可能です)。あるいは、この質問では説明しません別の解決策があるはずならば、私はそれを聞いていただきます:)

アップデート2: はこれまでのところ、私はこのスクリプトを作っています

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>'); 
} 

FFやChromeでは動作しますが、IEでは動作しません。明らかに、.appendは失敗します。何か案は?

答えて

13

wmodeを不透明(または透過)に設定しない限り、HTMLをFlashの前に置くことはできません。

デフォルトのwmode( "window")では、Flash Playerは、その領域内のすべてのレンダリングとユーザー操作を引き継ぎます。したがって、ブラウザはその領域にHTMLを表示できません。 wmode = "opaque"(またはwmode = "transparent")は、このデフォルトの動作を無効にし、ブラウザのFlash Playerエリアを通常のレンダリングやレイヤーなどに統合します。

wmodeを設定するためにFlashコンテンツを変更する必要はありません.HTML(またはFlashObject要素を挿入するSWFObjectや他のスクリプトを使用)で行われるため、「スクリプトあなたが言及しているフラッシュ要素を出力します、あなたはそこに設定されたwmodeを世話することができます。

+0

上記の私のコメントを参照してください。私は、スクリプトを制御できません。それらは提供され、必要に応じて毎秒変更することができます。 私は "iframes" タグにスクリプトを持っています。 「iframe」内のフラッシュオブジェクトを含むすべてのフラッシュオブジェクトでwmodeを編集するようにjQueryを設定できますか? –

+0

OK、それは悪いです。あなたがjQueryをフラッシュオブジェクトのHTMLコードを即座に変更できるかどうかは分かりませんが、一旦フラッシュがロードされるとそれを変更すると、フラッシュのリロードが必要になるかもしれません。ダイアログが表示されたときに広告を非表示にすることは、これまでのところ最良の解決策のように思えます。 –

+0

これは私が今行っていることです、ありがとう:) –

1

フラッシュが既にロードされた後、手動でwmodeをjavascriptで不透明に設定する方法はありますか?

+0

が:) –

1

私はこの記事を読んで、wmode = "opaque"というパラメータをオブジェクトタグに追加しようとしました。私のポストが遅すぎると申し訳ありません。

+1

はい、これは動作します。しかし、私が述べているように、私はスクリプトを制御できない広告のためにそれを動作させる必要があります。 –

2

私は解決策があると思います。 jquery-uiダイアログを使用して、これを把握しようとしていた時間と時間が私のために働いた

jqueryを前にすることができない場合はロジックがありました。研究はこのリンクに私を連れて行きました。

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; 

How do I programmatically set all <object>'s to have the wmode set to opaque? "iframeのシム" の

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

こんにちは、同じページにJamesのコメントを見ましたか?これに影響しない場合は、もう一度試してみてください:) –

0

検索グーグル。 基本的にhtmlの後ろにiframeを置くと、フラッシュコンテンツに渡されます(wmode設定は無視されます)。

バイバイ

+0

「Googleを検索する」より詳細を追加するように編集できますか? – Will

+0

これは結果の1つです:http://www.udm4.com/demos/extension-iframeshim.php。あなたは彼のアプローチをコピーして問題を解決することができます... – pincopallo

関連する問題