javascript - Chrome 中未定义的 SWFObject 事件可在 IE 中使用

标签 javascript google-chrome internet-explorer flash swfobject

我想在加载 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/

相关文章:

javascript - 制作用于绘制和修改图像的 Web 应用程序的最佳方法是什么?

javascript - 在循环中调用图像会产生重叠变量

html - 检查快速隐藏的元素

javascript - 如何在 Angular 4 应用程序中自动单击按钮?

css - SVG Sprite 图标背景位置在较新版本的 Chrome 中出现

internet-explorer - 向 IE 发送特定样式表时遇到问题

javascript - IE10寻找注释掉的javascript方法

javascript - onsen-ui 实​​现不同页面不同的滑动菜单

javascript - 如何在rails中保存多个复选框值?

jquery - 将 Checkbox 变成图标 IE9+