2017-05-10 2 views
0

다른 html의 iframe에로드 된 게시 된 Captivate HTML 파일이 있습니다. 나는 둘 사이에서 의사 소통을 할 수 없으며 localStorage와도 의사 소통을 할 수 없다. 아무도 내가 누락 된 걸 말해 줄 수 있니?captivate html과 상위 html 간 통신이 불가능합니다.

var everythingLoaded = setInterval(function() { 
      if (/loaded|complete/.test(document.readyState)) { 
       clearInterval(everythingLoaded); 
       init(); 
      } 
     }, 10); 

     function init() { 

      ScormProcessInitialize(); 
      var studentID = ScormProcessGetValue("cmi.core.student_id"); 
      var student_name = ScormProcessGetValue ("cmi.core.student_name"); 
      var nameArraya = student_name.split(" "); 
      var nameArrayb = nameArraya[1].split(","); 
      var studentNumber = nameArrayb[0]; 
      ScormProcessSetValue("cmi.core.lesson_status", "incomplete"); 
      localStorage.setItem("_studentNumber", studentNumber); 
      alert("Student Number: " + studentNumber + " Student Mame: " + student_name); 
      setTimeout(function() { 
        document.getElementById("iFrame_a").innerHTML = "<iframe name='iframe_1' id='frame_1' src='//somepath.com/sandbox/somecourse/index.html' frameborder='0' width='1000px' height='605px'></iframe>"; 
      }, 250); 
     } 

     function sendComplete() { 
      alert("Send from index start!"); 
      ScormProcessSetValue("cmi.core.lesson_status", "completed"); 
      alert("send status: Completed"); 
     } 
     window.onbeforeunload = function(){ 

      cpInfoCurrentSlide = localStorage.getItem("_cpInfoCurrentSlide") 
      alert(cpInfoCurrentSlide); 
      if(cpInfoCurrentSlide >= 40) 
       { 
      alert("onbeforeunload called: " + cpInfoCurrentSlide) 
      ScormProcessSetValue("cmi.core.lesson_status", "completed"); 
       } 
     } 

iframe이 코드

localStorage.setItem("_cpInfoCurrentSlide", cpInfoCurrentSlide); 
+0

iframe의 상위 도메인과 동일한 도메인 및 하위 도메인의 URL입니까? 또한 SCORM 1.2 또는 SCORM 2004로 내보내지는 Captivate 파일 또는 다른 패키지 형식입니까? – denodster

+0

실패한 시도 중 일부에서 코드를 게시 할 수 있습니까? – denodster

+0

또한 captivate가 상위 프레임의 scorm api와 통신 할 수없는 경우 올바르게 기억하면 문제를 나타내는 오류 메시지가 표시됩니다. 이 오류가 발생합니까? – denodster

답변

0

부모 HTML 나는 당신의 문제가 onbeforeunload와 믿습니다. Captivate 패키지가로드 될 때 상위 프레임에서 이전에로드 된 것과 관련된 모든 기능을 포착하는 것을 기억합니다.

당신의 SCORM API를 setValue의 메소드를 오버라이드 (override), 대신을 시도해보십시오

var oldLMSSetValue = window.API.LMSSetValue; 
window.API.LMSSetValue = function(key, value){ 
    if(key === 'cmi.core.lesson_status' && value === 'completed'){ 
    //do your stuff here 
    cpInfoCurrentSlide = localStorage.getItem("_cpInfoCurrentSlide") 
    alert(cpInfoCurrentSlide); 
    } 
    //call the original scorm api function so that it runs as expected. 
    oldLMSSetValue(key,value); 
}; 

편집 :이 코드는 부모 윈도우가 아닌 iframe에 갈 것입니다.