【发布时间】:2017-02-28 03:12:13
【问题描述】:
我想在加载 Flash 电影时获取它的 currentFrame。我按照这里找到的教程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 中我得到错误
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 分钟计算一次用户正在查看的当前页面。如果他卡在同一页面,我可以显示一个提示,用户必须单击才能继续查看课程,否则它将自动关闭。
【问题讨论】:
-
e.ref是对 SWF 本身的引用。它是跨浏览器的。当你说“检查e.ref.totalFrames返回undefined”时,你在什么时候检查?在setInterval内部还是直接在mycall函数中? -
另外,在 Firefox 和 Safari 中会发生什么(如果您使用的是 Mac)?
-
还有一个问题。 :) 这是一个基于 SCORM 的课程吗?由 Captivate 还是 Articulate 制作?
-
我正在检查 setInterval 中的
e.ref.totalFrames和e.ref.currentFrame(),因为在加载 Flash 影片之前,该值在开始时不可用。 -
该课程内部支持 SCORM 功能,效果很好。但是,我添加的这个功能是为了支持我们正在使用的常规 PHP 网络服务器。从本质上讲,该课程具有传统的发送和加载功能,可以同时从 MySQL 数据库中保存和检索数据,以及从 javascript 中发送和检索数据的代码(我实际上使用了您网站上的想法 :))
标签: javascript google-chrome internet-explorer flash swfobject