Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE中Chrome works中未定义SWFObject事件_Javascript_Google Chrome_Internet Explorer_Flash_Swfobject - Fatal编程技术网

Javascript IE中Chrome works中未定义SWFObject事件

Javascript IE中Chrome works中未定义SWFObject事件,javascript,google-chrome,internet-explorer,flash,swfobject,Javascript,Google Chrome,Internet Explorer,Flash,Swfobject,我想在加载Flash电影时获取它的当前帧。我遵循了这里找到的教程。我使用的是SWFObject2.3测试版。这在InternetExplorer上运行得非常好,但在GoogleChrome上不起作用 在Chrome中,我得到了错误 Uncaught TypeError: e.ref.currentFrame is not a function 检查e它返回[object object] 检查e.ref返回[object HTMLObjectElement] 检查e.ref.totalFrame

我想在加载Flash电影时获取它的当前帧。我遵循了这里找到的教程。我使用的是SWFObject2.3测试版。这在InternetExplorer上运行得非常好,但在GoogleChrome上不起作用

在Chrome中,我得到了错误

Uncaught TypeError: e.ref.currentFrame is not a function
检查
e
它返回
[object object]
检查
e.ref
返回
[object HTMLObjectElement]
检查
e.ref.totalFrames
返回
未定义的

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分钟查看的当前页面。如果他被困在同一个页面上,我可以显示一个提示,用户必须单击才能继续查看课程,否则课程将自动关闭。

我建议放弃基于SWF的
currentFrame
方法,使用JavaScript监控对数据库的调用。(根据您的评论,听起来DB调用是由JS发送的,所以这应该不是问题。)

如果课程书签每3分钟自动保存一次(如您的评论中所述),您可以在页面的JS中缓存该值,并在每次执行保存时进行比较。如果该值在x分钟内没有更改,则可以显示超时警告

如果您使用的是SCORM包装器(或类似的),这非常简单,只需修改包装器以包含计时器代码。比如:

//Old code (pseudocode, not tested)
function setBoomark (val){
    API.SetValue("cmi.core.lesson_location", val);
}


这是一个粗略的草图,但希望您能理解。

我建议放弃基于SWF的
currentFrame
方法,转而使用JavaScript监控对数据库的调用。(根据您的评论,听起来DB调用是由JS发送的,所以这应该不是问题。)

如果课程书签每3分钟自动保存一次(如您的评论中所述),您可以在页面的JS中缓存该值,并在每次执行保存时进行比较。如果该值在x分钟内没有更改,则可以显示超时警告

如果您使用的是SCORM包装器(或类似的),这非常简单,只需修改包装器以包含计时器代码。比如:

//Old code (pseudocode, not tested)
function setBoomark (val){
    API.SetValue("cmi.core.lesson_location", val);
}

这是一个粗略的草图,但希望你能理解。

我觉得自己很愚蠢

它在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
我觉得自己很愚蠢

它在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本身的引用。它是跨浏览器的。当你说“Checking
e.ref.totalFrames
返回
未定义的
”时,你在什么时候检查?在
setInterval
中或直接在
mycall
函数中?另外,在Firefox和Safari中发生了什么(如果您在Mac上)?还有一个问题:这是基于SCORM的课程吗?由Captivate或Articulate制作?我正在检查setInterval内的
e.ref.totalFrames
e.ref.currentFrames()
,因为在开始时,该值在Flash电影加载之前还不可用。课程内部支持SCORM功能,效果非常好。然而,我添加的这个功能是为了支持我们正在使用的常规PHP Web服务器。本质上,本课程具有传统的发送和加载功能,可以同时从MySQL数据库中保存和检索数据,从javascript中发送和检索数据的代码(我实际上是从您的站点使用了您的想法:)
e.ref
是对SWF本身的引用。它是跨浏览器的。当你说“Checking
e.ref.totalFrames
返回
未定义的
”时,你在什么时候检查?在
setInterval
中或直接在
mycall
函数中?另外,在Firefox和Safari中发生了什么(如果您在Mac上)?还有一个问题:这是基于SCORM的课程吗?由Captivate或Articulate制作?我正在检查setInterval内的
e.ref.totalFrames
e.ref.currentFrames()
,因为在开始时,该值在Flash电影加载之前还不可用。课程内部支持SCORM功能,效果非常好。然而,我添加的这个功能是为了支持我们正在使用的常规PHP Web服务器。从本质上讲,本课程具有传统的发送和加载功能,可以同时从MySQL数据库中保存和检索数据,以及从javascript发送和检索数据的代码(我实际上在您的站点中使用了您的想法:)。我也将尝试此功能。目前,我正在为用户所在的当前页面使用lesson_location。我将对此进行测试。非常感谢。我也要试试这个。目前,我正在为用户所在的当前页面使用lesson_location。我将对此进行测试。非常感谢。