0

로드되었을 때 내 Flash 무비의 currentFrame을 가져오고 싶습니다. 튜토리얼은 여기 http://learnswfobject.com/advanced-topics/executing-javascript-when-the-swf-has-finished-loading/index.htmlSWFOBJECT CurrentFrame Javascript에서 찾을 수 있습니다. SWFObject 2.3 베타 사용하고 있습니다. 이것은 Internet Explorer에서 완벽하게 작동하지만 Google 크롬에서는 작동하지 않습니다. 크롬에서 Chrome에서 정의되지 않은 SWFObject 이벤트가 IE에서 작동합니다.

나는

Uncaught TypeError: e.ref.currentFrame is not a function 

가 크롬에이 작동하지 않는 이유는 [object Object]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); 

undefined 확인 e.ref 반환 [object HTMLObjectElement] 확인 반환하지만 잘 작동 e을 점검 오류 IE? 이벤트 e이 감지되지 않습니까? Chrome에서이 작업을 수행하는 방법에 대한 해결 방법이 있습니까?

사용자가 열어 둔 코스를 실제로 사용하고 있고 유휴 상태로 두지 않은 경우에만 체크를 작성하는 것이 목적입니다. 유휴 상태인지를 확인하는 코드를 이미 추가했지만 충분하지 않습니다. 대부분의 학습자는 코스를 여는 방법을 알아 냈으므로 몇 시간 동안 훈련을 받으면됩니다. 심지어 컴퓨터가 유휴 상태가되지 않도록 몇 초마다 마우스를 1 픽셀 씩 움직이는 프로그램이 컴퓨터에서 실행되는 경우도 있습니다. Flash 무비의 현재 프레임을 확인할 수 있으면 15 분마다 사용자가보고있는 현재 페이지를 계산하는 함수를 만들 수 있습니다. 그가 같은 페이지에 머물러 있다면 나는 코스를 계속 보려면 클릭해야한다는 프롬프트를 보여줄 수 있습니다. 그렇지 않으면 자동으로 닫힙니다.

+0

'e.ref'는 SWF 자체에 대한 참조입니다. 그것은 크로스 브라우저입니다. "Checking e.ref.totalFrames'가'undefined'를 리턴한다고 말할 때, 어떤 시점에 체크하고 있습니까? 'setInterval' 내부 또는'mycall' 함수에서 직접? – pipwerks

+0

또한 Firefox 및 Safari (Mac을 사용하는 경우)에서 어떻게됩니까? – pipwerks

+0

질문이 하나 더 있습니다. :) SCORM 기반 과정입니까? Captivate 또는 Articulate에 의해 제작 되었습니까? – pipwerks

답변

1

JavaScript를 사용하여 데이터베이스 호출을 모니터링하기 위해 SWF 기반 currentFrame 접근 방식을 사용하지 않는 것이 좋습니다. (귀하의 의견에 따라 DB 호출이 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; 
    } 
} 

이 거친 스케치입니다 만 잘하면 당신은 아이디어를 얻을.

+0

나는 이것을 시도 할 것입니다. . 현재 사용자가 현재 페이지에 lesson_location을 사용하고 있습니다. 나는 이것을 시험 할 것이다. 고맙습니다! –

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