6

更新:这个问题的前提被证明是错误的。除非移动是响应用户点击,否则问题不会发生。请看这里


几天来,我一直在敲我的头,希望有人能提供帮助。

我有一个 jquery 脚本,它使用jwplayer javascript api调用 jwplayer 对象(“myplayer”) 。例如,要加载带有特定视频的 myplayer,我调用:

myplayer.load('my_url');

只要我不先将播放器移动到 DOM 中的不同位置,这在 Firefox 和 Internet Explorer 中都可以正常工作。

但是,我的脚本有时会在调用 myplayer.load(). 这在 Firefox 中运行良好。但是在 Internet Explorer 9 中,我在这一行得到一个错误:

return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));

在这个函数里面:

function __flash__addCallback(instance, name) {
  instance[name] = function () { 
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
  }
}

如果我跟踪 Internet Explorer 调试器中发生的事情,我会看到myplayer.load('my_url')调用this.callInternal("jwLoad",u)in jwplayer.js,并且显然在执行this.callInternal("jwLoad",u)时发生了错误。

细节:

html 看起来像这样:

<div id='stage'>
    <div id='myplayer_wrapper'>
        <object id='myplayer'>...</object>
    </div>
</div>
<div id='holding-pen'></div>

当播放器不被使用时,我将其 wrapper-div 移动到握笔:

var el = $('#myplayer_wrapper');            
$('#holding-pen').append(el);

将播放器的 wrapper-div 移动到触控笔后,html 现在看起来像:

<div id='stage'></div>
<div id='holding-pen'>
    <div id='myplayer_wrapper'>
        <object id='myplayer'>...</object>
    </div>
</div>

当我希望使用播放器时,我将其 wrapper-div 移回 stage-div:

var el = $('#myplayer_wrapper');            
$('#stage).append(el);

将播放器的 wrapper-div 移动到 stage-div 后,html 看起来和原来一样:

<div id='stage'>
    <div id='myplayer_wrapper'>
        <object id='myplayer'>...</object>
    </div>
</div>
<div id='holding-pen'></div>

在页面加载时,我创建播放器对象并将其移动到握笔。然后我将它移到舞台上并加载视频。

例如,如果用户单击图像缩略图,我将视频播放器移动到握持笔上,并将选定的图像移动到舞台上。

如果用户然后单击视频缩略图,我会从握笔中取出视频播放器并将其移回舞台。然后我用所选视频加载播放器。这是 Internet Explorer 中出现“_ flash _addCallback”问题的地方。

有没有人对可能发生的事情有任何见解?或者关于如何让它在 Internet Explorer 中工作的任何建议?

非常感谢!

4

1 回答 1

1

就网络上的各种帖子而言,这似乎是 IE(6、7、8 和 9)的一个已知问题。这取决于Flash版本和IE版本的组合。

IE似乎为媒体播放器所期望的词语保留了一些方法:

  • 停止
  • 暂停
  • 长度

...并且该__flash__addCallback()功能似乎使用了相同的词。play并且stopFlash电影的重要组成部分,并决定它们何时播放或停止。我无法确认更高版本Flash是否对此进行了修改。

支持这一点的来源:

一个有趣的转折: http ://beweb.pbworks.com/w/page/53110280/Flash%20IE8%20Javascript%20Error

一些人建议使用SWFObject来解决浏览器问题,例如这个问题,其他人则研究了 Soundcloud 修复他们的播放器的方式 - 尽管这篇 SoundCloud 文章粉碎了那里的任何希望。

归根结底,问题在于Flash期望如何JavaScript与自身通信,这与IE. 您可能必须:

  • 更新你的jwplayer
  • 在jwplayer的错误跟踪器上创建问题
  • 自己解决问题...

帮助我解决许多 IE 问题的方法是将 DOCTYPE 更改为<!DOCTYPE html>. 简单而有效。请注意,IE7希望单词 DOCTYPE 写成大写。每当我尝试这个时,我就知道我已经变成了一个绝望的僵尸。:P

最后但并非最不重要的一点是,请确保关闭下面的最后一个单引号:

$('#stage).append(el);
于 2014-03-07T21:36:39.270 回答