首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在页面加载后立即激活ResponsiveVoice?

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

Stack Overflow用户
提问于 2016-04-16 02:20:54
回答 3查看 3.1K关注 0票数 1

当我点击“播放”按钮时,这段简单的代码运行得很好:

代码语言:javascript
复制
<html>
    <head>
        <script src="https://code.responsivevoice.org/responsivevoice.js"></script>
    </head>
    <body>


    <input 
      onclick="responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female'); responsiveVoice.speak('love you.','US 

English Female');" 
      type="button" 
      value="Play" 
        />

    </body>

</html>

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

代码语言:javascript
复制
<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>

你知道问题出在哪里吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-16 02:38:33

如果你看一下响应式语音代码,他们的代码中有一个奇怪的大约200毫秒的超时:

代码语言:javascript
复制
        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毫秒,以便等待所有的声音加载(但你只需要这样做一次)

代码语言:javascript
复制
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(); }
}

还要按照这里的建议来做:在函数的onload中使用https://stackoverflow.com/a/36654326/561731

代码语言:javascript
复制
<html>
<head>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script type="text/javascript"> 
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(); }
}
</script>
</head>

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

</html>

票数 3
EN

Stack Overflow用户

发布于 2016-04-16 02:22:43

不正确:

代码语言:javascript
复制
<body onload="javascript:read();">

vs

正确:

代码语言:javascript
复制
<body onload="read();">
票数 1
EN

Stack Overflow用户

发布于 2016-04-16 02:28:10

只需等待一秒钟,让它加载,就像they suggest

代码语言:javascript
复制
<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');
}
setTimeout(function(){ read(); }, 1000);
</script>
</head>

<body>
</body>

</html>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36654291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档