无法在captivate html和父html之间进行通信

时间:2017-05-10 18:37:05

标签: javascript html5 adobe-captivate

我有一个已发布的captivate html文件,该文件被加载到另一个html的iframe中。我无法在两者之间进行沟通,甚至没有localStorage。谁能告诉我我错过了什么?

家长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);

1 个答案:

答案 0 :(得分:0)

我相信你的问题在于onbeforeunload。我记得当它们加载时,captivate包会破坏父帧中与onbeforeunload相关的任何函数。

请尝试使用此选项,覆盖SCORM api setvalue方法:

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。