我想在加载 Flash 影片时获取其当前帧。我按照此处找到的教程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 上工作?
这样做的目的是让我检查用户是否真的在使用他打开的类(class),而不仅仅是让它闲置。我已经添加了一个代码来检查空闲情况,但这还不够。大多数学习者已经找到了一种方法,只需开设一门类(class),然后将其留在那里积累培训时间。有些人甚至在计算机中运行一个程序,每隔几秒将鼠标移动 1 个像素,这样计算机就不会进入空闲状态。如果我可以检查 Flash 影片的当前帧,我可以创建一个函数来计算用户每 15 分钟正在查看的当前页面。如果他卡在同一页面,我可以显示一个提示,用户必须单击才能继续查看类(class),否则类(class)将自动关闭。
最佳答案
我建议放弃基于 SWF 的 currentFrame
方法,转而使用 JavaScript 监视对数据库的调用。 (根据您的评论,听起来 DB 调用是由 JS 发送的,所以这应该不是问题。)
如果类(class)书签每 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;
}
}
这是一个粗略的草图,但希望您能明白。
关于javascript - Chrome 中未定义的 SWFObject 事件可在 IE 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42499513/