Javascript 如何在页面加载后立即激活ResponsiveVoice?

Javascript 如何在页面加载后立即激活ResponsiveVoice?,javascript,responsivevoice,Javascript,Responsivevoice,当我点击“播放”按钮时,这个简单的代码可以正常工作: 但是,当我试图将其放入一个名为on load的函数中时,它不起作用: <html> <head> <script src="https://code.responsivevoice.org/responsivevoice.js"></script> <script type="text/javascript"> function read

当我点击“播放”按钮时,这个简单的代码可以正常工作:


但是,当我试图将其放入一个名为on load的函数中时,它不起作用:

<html>
    <head>
    <script src="https://code.responsivevoice.org/responsivevoice.js"></script>
    <script type="text/javascript"> 
        function read(){

            responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
        responsiveVoice.speak('Love you.','US English Female');
        }
    </script>
</head>

<body onload="javascript:read();">
</body>

</html>

函数read(){
回应的声音。说(‘莉莉,你不能就这样把我冻住’,‘我们英国女性’);
回应的声音。说‘爱你’,‘美国英语女性’;
}
您知道可能是什么问题吗?

不正确:

vs

对的:

不正确:

vs

对的:
只需等待一秒钟即可加载,如图所示


函数read(){
回应的声音。说(‘莉莉,你不能就这样把我冻住’,‘我们英国女性’);
回应的声音。说‘爱你’,‘美国英语女性’;
}
setTimeout(函数(){read();},1000);

只需等待一秒钟即可加载,如图所示


函数read(){
回应的声音。说(‘莉莉,你不能就这样把我冻住’,‘我们英国女性’);
回应的声音。说‘爱你’,‘美国英语女性’;
}
setTimeout(函数(){read();},1000);

如果您查看响应语音代码,他们的代码中有一个奇怪的~200毫秒超时:

        a.enableFallbackMode()) : setTimeout(function() {
            var b = setInterval(function() {
                var c = window.speechSynthesis.getVoices();
                0 != c.length || null  != a.systemvoices && 
                0 != a.systemvoices.length ? (console.log("RV: Voice support ready"),
                a.systemVoicesReady(c),
                clearInterval(b)) : (console.log("Voice support NOT ready"),
                a.voicesupport_attempts++,
                a.voicesupport_attempts > a.VOICESUPPORT_ATTEMPTLIMIT && (clearInterval(b),
                null  != window.speechSynthesis ? a.iOS ? (a.iOS9 ? a.systemVoicesReady(a.cache_ios9_voices) : a.systemVoicesReady(a.cache_ios_voices),
                console.log("RV: Voice support ready (cached)")) : (console.log("RV: speechSynthesis present but no system voices found"),
                a.enableFallbackMode()) : 
                a.enableFallbackMode()))
            }, 100)
        }, 100);
        a.Dispatch("OnLoad")
如果在超时结束前尝试使用语音,您将点击以下控制台日志:

1570RV:错误:找不到美国英语女性的语音

根据我的经验,这是不好的,可能会抛出一个错误


如果您想继续使用此脚本,唯一的解决方案是等待至少201毫秒,以等待所有语音加载(但您只需执行一次)

还要执行此处建议的操作:在函数的onload中


让readItOnce=false;
函数read(){
常量readIt=()=>{
可读性=真;
回应的声音。说(‘莉莉,你不能就这样把我冻住’,‘我们英国女性’);
回应的声音。说‘爱你’,‘美国英语女性’;
}
如果(!readItOnce){setTimeout(readIt,201)}
else{readIt();}
}

如果您查看响应语音代码,他们的代码中有一个奇怪的~200毫秒超时:

        a.enableFallbackMode()) : setTimeout(function() {
            var b = setInterval(function() {
                var c = window.speechSynthesis.getVoices();
                0 != c.length || null  != a.systemvoices && 
                0 != a.systemvoices.length ? (console.log("RV: Voice support ready"),
                a.systemVoicesReady(c),
                clearInterval(b)) : (console.log("Voice support NOT ready"),
                a.voicesupport_attempts++,
                a.voicesupport_attempts > a.VOICESUPPORT_ATTEMPTLIMIT && (clearInterval(b),
                null  != window.speechSynthesis ? a.iOS ? (a.iOS9 ? a.systemVoicesReady(a.cache_ios9_voices) : a.systemVoicesReady(a.cache_ios_voices),
                console.log("RV: Voice support ready (cached)")) : (console.log("RV: speechSynthesis present but no system voices found"),
                a.enableFallbackMode()) : 
                a.enableFallbackMode()))
            }, 100)
        }, 100);
        a.Dispatch("OnLoad")
如果在超时结束前尝试使用语音,您将点击以下控制台日志:

1570RV:错误:找不到美国英语女性的语音

根据我的经验,这是不好的,可能会抛出一个错误


如果您想继续使用此脚本,唯一的解决方案是等待至少201毫秒,以等待所有语音加载(但您只需执行一次)

还要执行此处建议的操作:在函数的onload中


让readItOnce=false;
函数read(){
常量readIt=()=>{
可读性=真;
回应的声音。说(‘莉莉,你不能就这样把我冻住’,‘我们英国女性’);
回应的声音。说‘爱你’,‘美国英语女性’;
}
如果(!readItOnce){setTimeout(readIt,201)}
else{readIt();}
}


您会遇到什么错误?您不需要
javascript:
部分。你只在锚点等的href属性上使用这些。即使这样,我也不会使用它。在使用javascript协议之前,我会钩住一个click事件。F12可以启动开发控制台,但我怀疑该错误对使用javascript启动的人是否有帮助。@希望F12对我有帮助;-)文档不是readyThen FN+F12或其他内容。您遇到了什么错误?您不需要
javascript:
部分。你只在锚点等的href属性上使用这些。即使这样,我也不会使用它。在使用javascript协议之前,我会钩住一个click事件。F12可以启动开发控制台,但我怀疑该错误对使用javascript启动的人是否有帮助。@希望F12对我有帮助;-)文档不是readyThen FN+F12之类的。在我的浏览器上,无论是否使用javascript协议,它都可以正常工作。唯一的问题是它只播放最后一个请求的声音。这正是我所期望的。DOM还没有完全加载lib@JeffPuckettII这不重要。脚本加载到head标记中。代码不依赖于DOM脚本在head标记中,因此它已经被预加载。不应该,这只是我的知识的一部分,但是我可以在开发者控制台日志中看到它还没有准备好。在我的浏览器上,无论是否使用javascript协议,它都可以正常工作。唯一的问题是它只播放最后一个请求的声音。这正是我所期望的。DOM还没有完全加载lib@JeffPuckettII这不重要。脚本加载到head标记中。代码不依赖于DOM脚本在head标记中,因此它已经被预加载。不应该,这只是我的知识的一部分,但是我可以在开发者控制台日志中看到它还没有准备好。可能需要进行一些额外的初始化。如果您查看控制台(如果您将其置于onload事件中),它只会说
RV:ERROR:No voice for:US-English-Female
,因此代码确实加载了,只是扬声器代码中存在一些问题。如果您查看控制台,甚至建议设置超时(如果你把它放在onload事件中)它只是说
RV:ERROR:No voice found for:US-English-Female
,所以代码确实加载了,只是说话人代码中存在一些问题。甚至建议设置一个timeout这很可怕(也就是说,有人应该信任这些开发人员吗?)这似乎是唯一官方支持的等待此库准备就绪的方法。我从您引用的代码中看到,它们有一个
OnLoad
事件,您可以侦听…但它们似乎没有任何属性,您可以(正式)检查以确定它是否已加载,因此
<body onload="read();">
        a.enableFallbackMode()) : setTimeout(function() {
            var b = setInterval(function() {
                var c = window.speechSynthesis.getVoices();
                0 != c.length || null  != a.systemvoices && 
                0 != a.systemvoices.length ? (console.log("RV: Voice support ready"),
                a.systemVoicesReady(c),
                clearInterval(b)) : (console.log("Voice support NOT ready"),
                a.voicesupport_attempts++,
                a.voicesupport_attempts > a.VOICESUPPORT_ATTEMPTLIMIT && (clearInterval(b),
                null  != window.speechSynthesis ? a.iOS ? (a.iOS9 ? a.systemVoicesReady(a.cache_ios9_voices) : a.systemVoicesReady(a.cache_ios_voices),
                console.log("RV: Voice support ready (cached)")) : (console.log("RV: speechSynthesis present but no system voices found"),
                a.enableFallbackMode()) : 
                a.enableFallbackMode()))
            }, 100)
        }, 100);
        a.Dispatch("OnLoad")
let readItOnce = false;
function read(){
    const readIt = () => {
        readItOnce = true;
        responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
        responsiveVoice.speak('Love you.','US English Female');
    }
    if (!readItOnce) { setTimeout(readIt, 201)}
    else { readIt(); }
}