Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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?_Javascript_Html_Yepnope - Fatal编程技术网

如果启动后互联网可用,如何使用预加载程序加载外部javascript?

如果启动后互联网可用,如何使用预加载程序加载外部javascript?,javascript,html,yepnope,Javascript,Html,Yepnope,我一直在尝试我的html5应用程序。除了响应语音,我的应用程序可以独立运行,不需要互联网,因为我工作的学校的互联网连接不可靠 我以前在等待RV的javascript加载到慢速连接时遇到了一个问题,我使用预加载程序解决了这个问题: 在进行测试时,我意识到可能会有更好的结果:如果脚本没有加载,yepnope会在10秒后自动超时并触发回调函数。这个超时可以改变,但我想要的是,实际上,根本没有超时 例如,如果学生们在早上7:30开始使用我的应用程序,而学校的卫星天线几乎无法工作,那么下午3点,云层就会散

我一直在尝试我的html5应用程序。除了响应语音,我的应用程序可以独立运行,不需要互联网,因为我工作的学校的互联网连接不可靠

我以前在等待RV的javascript加载到慢速连接时遇到了一个问题,我使用预加载程序解决了这个问题:

在进行测试时,我意识到可能会有更好的结果:如果脚本没有加载,yepnope会在10秒后自动超时并触发回调函数。这个超时可以改变,但我想要的是,实际上,根本没有超时

例如,如果学生们在早上7:30开始使用我的应用程序,而学校的卫星天线几乎无法工作,那么下午3点,云层就会散去,使RV可以运行,如果脚本最终加载,触发回调,RV就可以启动了

所以我有3个问题:

  • 原则上,我有什么理由不把yepnope超时时间从10秒改为12小时?e、 g

    yepnope.errorTimeout = 43200000;
    
  • 我注意到yepnope已被弃用。有谁能推荐一个类似的易于使用的预加载程序,带有无超时选项吗

  • 使用setInterval是否会减少系统资源?e、 g

    var net_check = window.setInterval(yepnope, 18000); // try loading the script every 5 minutes
    
    然后,如果RV加载,取消设置间隔:

    yepnope({
      load: 'https://code.responsivevoice.org/responsivevoice.js',
        callback: function (url, result, key) {
        if (typeof responsiveVoice!="undefined"){
            clearInterval(net_check);
            //code to activate RV functionality here
        }
      }
    });
    
  • 一如既往地感谢你的建议


    编辑:@Steyn van Esveld提出了一个非常好的观点:“有什么原因不能下载responsivevoice.js并在本地加载吗?”

    事实上,RV脚本本身并没有提供文本到语音的声音,它更像是一个促进者。如果您的浏览器具有本机t-t-s支持,它将使用它,如果没有,它们将生成音频文件(可能来自其网站)并将其发送到您的浏览器。此外,即使是Chrome的原生t-t-s支持也会在离线时消失。e、 g.如果您跑步:

    voices = window.speechSynthesis.getVoices();
    voices.length
    
    脱机时从控制台返回“0”

    这意味着,如果在加载我的应用程序后互联网宕机,我需要一个后备方案。我发现最可靠的方法是:

    var rvStarted=false;
    responsiveVoice.speak(vocEx, {onstart:function(){rvStarted=true;}}); 
    setTimeout(function(){
      if (rvStarted==false){
        responsiveVoice.cancel();
        audVoc.play(); //plays a backup off-line recording 
      }
    },1000);
    

    RV api中有一个onerror回调,但它的文档记录不清楚,我当然无法像使用此脚本那样控制超时。

    经过更多的研究和实验,我找到了一个可行的解决方案。如果有人能想出更有效的办法,我会很高兴的。首先是代码(解释如下):

    现在解释一下:

  • 我意识到yepnope在第一次尝试时检测到没有网络连接,并且随后没有尝试加载javascript,尽管同时网络已经打开。问题不在于超时(因此问题标题的更改)
  • 因此,我四处寻找yepnope的替代品,该替代品将在每次调用时尝试加载javascript,而不管之前发生了什么。我最终发现。这是基于yepnope的,删除了一些功能,添加了一些功能。我猜检查是否有网络连接的功能被删除了,这很合适我的需要
  • 然后,我将inject.js包装在一个函数中,并使用setInterval每分钟调用一次。我还立即调用它一次,以便在初始化时如果存在可行的Internet连接,RV功能将出现
  • 虽然这看起来很难实现,但到目前为止它运行得很好。我已经用我通常面临的三种情况对它进行了测试:

  • 启动期间完全没有网络连接;计算机将在一段时间后连接到网络
  • 本地网络连接,但在启动期间没有Internet连接;本地网络在一段时间后连接到Internet
  • 启动过程中非常缓慢的Internet连接;该连接在一段时间后变得可行
  • 设置间隔对程序执行没有明显影响,添加的功能相当透明。如果我将计算机连接到网络并开始收听活动,大约1分钟后,RV语音将添加到我的离线录音中


    我怀疑许多其他人也面临类似的问题(我当然不希望他们出现在任何人身上),但如果是这样,我真的希望这能有所帮助。

    经过更多的研究和实验,我找到了一个有效的解决方案。如果有人能想出更有效的方法,我会很高兴。首先是代码(解释如下):

    现在解释一下:

  • 我意识到,yepnope在第一次尝试时检测到没有网络连接,之后,尽管网络已经打开,但没有尝试加载javascript。问题不是超时(因此问题标题的更改)
  • 因此,我四处寻找yepnope的替代品,该替代品将在每次调用时尝试加载javascript,而不管之前发生了什么。我最终发现。这是基于yepnope的,删除了一些功能,添加了一些功能。我猜检查是否有网络连接的功能被删除了,这很合适我的需要
  • 然后,我将inject.js包装在一个函数中,并使用setInterval每分钟调用一次。我还立即调用它一次,以便在初始化时如果存在可行的Internet连接,RV功能将出现
  • 虽然这看起来很难实现,但到目前为止它运行得很好。我已经用我通常面临的三种情况对它进行了测试:

  • 启动期间完全没有网络连接;计算机将在一段时间后连接到网络
  • 本地网络连接,但在启动期间没有Internet连接;本地网络在一段时间后连接到Internet
  • 启动过程中非常缓慢的Internet连接;该连接在一段时间后变得可行
  • setInterval对程序的执行没有明显的影响,添加的功能非常简单
    var rvStarted=false;
    responsiveVoice.speak(vocEx, {onstart:function(){rvStarted=true;}}); 
    setTimeout(function(){
      if (rvStarted==false){
        responsiveVoice.cancel();
        audVoc.play(); //plays a backup off-line recording 
      }
    },1000);
    
        function loadRV() {
        console.log("Trying to load RV");
        inject.js('https://code.responsivevoice.org/responsivevoice.js',           
            function() {
                if (typeof responsiveVoice!="undefined"){
                    clearInterval(net_check);
                    console.log("RV loaded");
                    // code here to turn on RV functionality
                }
                else {
                    console.log("RV load failed");
                }
            });
        }
    
        var net_check=setInterval(function(){
            loadRV();
        },60000);
        loadRV();