我想在加载时获取我的Flash电影的currentFrame。我按照http://learnswfobject.com/advanced-topics/executing-javascript-when-the-swf-has-finished-loading/index.html和SWFOBJECT CurrentFrame Javascript中的教程进行操作。我正在使用SWFObject 2.3 beta。这在Internet Explorer上完全正常,但它在Google Chrome上无效。
在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上进行此操作的解决方法?
这样做的目的是让我创建一个检查,如果用户确实正在使用他已经打开的课程而不是让它闲置。我已经添加了一个代码来检查空闲但这还不够。大多数学习者已经找到了开设课程的方法,并将其留在那里以积累数小时的培训。有些人甚至在他们的计算机上运行一个程序,它只需每隔几秒就移动1个像素,这样计算机就不会空闲。如果我可以检查Flash影片的当前帧,我可以创建一个函数来计算用户每15分钟查看一次的当前页面。如果他被困在同一页面,我可以显示一个提示,用户必须单击才能继续查看该课程,否则它将自动关闭。
答案 0 :(得分:1)
我建议放弃基于SWF的currentFrame
方法,以便使用JavaScript监控对数据库的调用。 (根据你的评论,听起来好像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;
}
}
这是一幅粗略的草图,但希望你明白这一点。
答案 1 :(得分:1)
我觉得自己很蠢!
它在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