“Math”在嵌入对象中是未定义的错误。

4

我正在使用ajax在页面加载时加载YouTube视频。

$(document).ready(function(){
     $.ajax({
        url : '/myurl',
        type:"post",           
        data:{"d": $('#d_id').val()},  
        async:false,
        success:function(data){ 
            $('#container').html(data);

            //data is an emebed string

          //This is what i get from PHP page
            /*<embed class="frame"  width="850" scrolling="no" height="415" frameborder="0" src="http://www.youtube.com/embed/' . $k[0] . '?showinfo=1&amp;modestbranding=1&amp;autoplay=1&amp;rel=0&amp;iv_load_policy=3&amp;cc_load_policy=1&amp;loop=1&amp;playlist=' . $k[0] . '&amp;wmode=transparent" frameborder="0""  allowfullscreen="yes" wmode="Opaque"></embed> */
        }    
    });
});

在IE以外的所有浏览器中工作

输入图像描述

根据屏幕截图,我遇到了“Math未定义”的错误。如果我将embed更改为iframe,则会遇到更严重的错误,例如“__flash__removecallback未定义”。

更新

如果我使用嵌入,则整个内容在IE8中无法正常工作。

有人帮帮我,IE让我疯狂。


你试过用我建议的append()而不是html()吗? - epascarello
1
https://github.com/davatron5000/FitVids.js/issues/26 - epascarello
1
那个<embed>标签是一个奇怪的混合物,可能是一个<iframe>标签,只是通过更改tagName粗略地转换而来。scrolling,frameborder(两次),allowfullscreen,wmode属性对我来说看起来不对。<embed>应该有width,height,src和重要的type。还要确保您的文档具有HTML5 doctype。如果仍然有问题,请转到YouTube并获取最新的嵌入式标记。 - Beetroot-Beetroot
1
此外,在尝试通过ajax提供YouTube标记之前,请确保您的YouTube标记在页面上硬编码时有效。如果其中一种方式有效而另一种方式无效,则必须放弃ajax,改为使用硬编码嵌入整个页面。 - Beetroot-Beetroot
为什么要从服务器提供嵌入代码?只需提供视频ID并使用jQuery构建嵌入代码即可。尽可能使用iframe API;它也适用于IE。 - Salman A
显示剩余6条评论
1个回答

3

终于搞定了

在服务器端(即 Ajax 响应)

if (preg_match('/MSIE 9.0/', $_SERVER['HTTP_USER_AGENT'])) { /*for IE 9.0 generate with objace tag*/ ?>
     <object type="application/x-shockwave-flash" data="VIDEO_URL">
      <param name="movie" value="VIDEO_URL" />
      </object>
 <?php } else { /*rest of all browsers,in iframe*/ ?>
      <iframe src="VIDEO_URL"></iframe>
 <?php } ?>

1
干得好,Uber。你可能还需要考虑的另一件事是IE8/7/6也可能需要相同的调整正则表达式。我认为我说得对,你可以接受自己的答案。 - Beetroot-Beetroot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接