在Chrome中未定义的SWFObject事件在IE中工作
我想在加载Flash动画时获取当前帧。我按照这里发现的教程http://learnswfobject.com/advanced-topics/executing-javascript-when-the-swf-has-finished-loading/index.html和SWFOBJECT CurrentFrame Javascript。我正在使用SWFObject 2.3测试版。这在Internet Explorer上工作得很好,但它不适用于Google Chrome。在Chrome中未定义的SWFObject事件在IE中工作
在Chrome中我得到的错误
Uncaught TypeError: e.ref.currentFrame is not a function
检查e
返回[object Object]
检查e.ref
回报[object HTMLObjectElement]
检查e.ref.totalFrames
回报undefined
var flashvars = {};
var params = {};
var attributes = {};
function mycall(e){
setInterval(function(){console.log("Frame: " + e.ref.currentFrame)},1000);
}
swfobject.embedSWF("notmyswf.swf", "course", "100%", "100%", "6.0.0", false, flashvars, params, attributes, mycall);
这是为什么无法在Chrome工作但效果很好IE浏览器?未检测到事件e
?有没有解决如何使这项工作在Chrome上的解决办法?
这样做的目的是为了我,如果用户真的用他打开,不只是离开它空闲的过程中创造的支票。我已经添加了一个代码来检查闲置,但这还不够。大多数学习者已经想出了一种开放课程的方式,让它在那里积累数小时的训练。有些人甚至在他们的电脑上运行一个程序,它会每隔几秒将鼠标移动一个像素,以免计算机闲置。如果我可以检查Flash电影的当前帧,我可以创建一个函数来计算用户每15分钟查看的当前页面。如果他被困在同一页面中,我可以显示一条提示,说明用户必须点击才能继续查看课程,否则会自动关闭。
我建议下降有利于监视您的通话使用JavaScript数据库的基于SWF的currentFrame
方法。 (根据您的意见,这听起来像是由JS发送数据库调用,所以这应该不成问题。)
如果课程书签每3分钟自动保存一次(如您的评论中所述) ,您可以将该值缓存在页面的JS中,并在每次执行保存时进行比较。如果该值在x分钟内没有改变,则可以显示超时警告。
如果您使用的是SCORM包装(或类似),这是非常简单,只需修改包装,包括你的计时器代码。喜欢的东西:
//Old code (pseudocode, not tested)
function setBoomark (val){
API.SetValue("cmi.core.lesson_location", val);
}
//New code (pseudocode, not tested)
var current_location = "";
var activityTimer;
function disableCourse(){
//do stuff to disable course because it timed out
}
function setBoomark (val){
API.SetValue("cmi.core.lesson_location", val);
if(val === current_location){
//do nothing, timer keeps ticking
} else {
//reset timer using new bookmark value
if(activityTimer){ clearTimeout(activityTimer); }
activityTimer = setTimeout(disableCourse, 15000);
//Update current_location value
current_location = val;
}
}
这是一个粗略的草图,但希望你的想法。
我也会试试这个。目前,我正在为用户所在的当前页面使用lesson_location。我会测试一下。谢谢! –
我觉得很蠢!
它在Chrome和Firefox中无法正常工作,因为我使用了错误的外壳功能,但在IE11中它无论如何都能正常工作。
所以正确的功能是:
e.ref.CurrentFrame() //I used currentFrame() which still works in IE11
e.ref.TotalFrames() //I used totalFrames() which still works in IE11
e.ref.PercentLoaded() //I used this correctly and was able to get the value
'e.ref'是对SWF自身的引用。它是跨浏览器的。当你说“检查e.ref.totalFrames'返回'undefined'”时,你在什么时候检查?在'setInterval'里面还是直接在'mycall'函数中? – pipwerks
另外,Firefox和Safari中会发生什么(如果你在Mac上)? – pipwerks
还有一个问题。 :)这是一个基于SCORM的课程吗?由Captivate或Articulate制作? – pipwerks