如果启动后互联网可用,如何使用预加载程序加载外部javascript?
我一直在尝试我的html5应用程序。除了响应语音,我的应用程序可以独立运行,不需要互联网,因为我工作的学校的互联网连接不可靠 我以前在等待RV的javascript加载到慢速连接时遇到了一个问题,我使用预加载程序解决了这个问题: 在进行测试时,我意识到可能会有更好的结果:如果脚本没有加载,yepnope会在10秒后自动超时并触发回调函数。这个超时可以改变,但我想要的是,实际上,根本没有超时 例如,如果学生们在早上7:30开始使用我的应用程序,而学校的卫星天线几乎无法工作,那么下午3点,云层就会散去,使RV可以运行,如果脚本最终加载,触发回调,RV就可以启动了 所以我有3个问题:如果启动后互联网可用,如何使用预加载程序加载外部javascript?,javascript,html,yepnope,Javascript,Html,Yepnope,我一直在尝试我的html5应用程序。除了响应语音,我的应用程序可以独立运行,不需要互联网,因为我工作的学校的互联网连接不可靠 我以前在等待RV的javascript加载到慢速连接时遇到了一个问题,我使用预加载程序解决了这个问题: 在进行测试时,我意识到可能会有更好的结果:如果脚本没有加载,yepnope会在10秒后自动超时并触发回调函数。这个超时可以改变,但我想要的是,实际上,根本没有超时 例如,如果学生们在早上7:30开始使用我的应用程序,而学校的卫星天线几乎无法工作,那么下午3点,云层就会散
yepnope.errorTimeout = 43200000;
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回调,但它的文档记录不清楚,我当然无法像使用此脚本那样控制超时。经过更多的研究和实验,我找到了一个可行的解决方案。如果有人能想出更有效的办法,我会很高兴的。首先是代码(解释如下): 现在解释一下:
我怀疑许多其他人也面临类似的问题(我当然不希望他们出现在任何人身上),但如果是这样,我真的希望这能有所帮助。经过更多的研究和实验,我找到了一个有效的解决方案。如果有人能想出更有效的方法,我会很高兴。首先是代码(解释如下): 现在解释一下:
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();