更新:这个问题的前提被证明是错误的。除非移动是响应用户点击,否则问题不会发生。请看这里。
几天来,我一直在敲我的头,希望有人能提供帮助。
我有一个 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 中工作的任何建议?
非常感谢!