1

ここnickfにあるの例を使用し て、IE7 で表示されるサイトの iframe の代わりを一緒にハックする要素を作成しました。これは、オフィスのすべてのコンピューターが IE8 にアップグレードされるまでの短期的な応急処置です。そのため、サーバー側のソリューションに煩わされることはありません。

目標は、サイト上のすべてのビデオを置き換えることなく、YouTube 埋め込みコードを古い埋め込みコードに変換することです。

var w = $('iframe').width(),
    h = $('iframe').height(),
    src = $('iframe').attr('src').split('/')[4];

$('iframe').after('<div class="iframediv"></div>');

$('<object></object>', {width: w, height: h})
.append($('<param />', {name: "movie", value: "http://www.youtube.com/v/" + src + "?hl=en_US&amp;version=3"}))
.append($('<param />', {name: "allowFullScreen", value: "true"}))
.append($('<param />', {name: "allowscriptaccess", value: "always"}))
.append($('<embed />', {src: "http://www.youtube.com/v/" + src + "?hl=en_US&amp;version=3", type: "application/x-shockwave-flash", width: w, height: h, allowscriptaccess: "always", allowfullscreen: "true"}))
.appendTo($('.iframediv'));

このコードの実際の例は、jsfiddleにあります。

私が問題を抱えているのは、作成された要素が IE7 で機能しないことです。作成コードが壊れているように見え、<object>jQuery が動作しなくなりますが、Chrome では問題なく動作します。これを達成するために必要な IE7 固有の回避策があるかどうかわかりません。

編集:$('iframe').remove();今のところ、テスト目的で意図的に行を省略しました。

編集:私の修正 -

if($('html').hasClass('ie7'))
{
    var w = $('iframe').width(),
    h = $('iframe').height(),
    ytsrc = $('iframe').attr('src').split('/')[4];

    $('iframe').after('<div class="iframediv"></div>');
    $('<embed />', {width: w, height: h, src: "http://www.youtube.com/v/" + ytsrc + "?hl=en_US&amp;version=3", type: "application/x-shockwave-flash", allowfullscreen: "true", allowscriptaccess: "always"}).appendTo($('.iframediv'));
    $('iframe').remove();
}
4

2 に答える 2

1

HTMLを単一の文字列として作成して追加しようとしましたか?

$('.iframediv').append('
   <object><param name="move" etc="etc"></param>
   <param stuff="stuff"></param>
   <embed src=""></embed></object>');

これは一例です。すべての正しいパラメーターでテストします。

于 2013-06-19T00:09:52.150 に答える