5

ResponsiveVoice.JS 网站的 quirks 部分下,它指出:

iOS TTS 无法在没有直接用户交互的情况下触发,ResponsiveVoice JS 解决了这个问题

但是,就我的一生而言,我无法绕过这种直接的用户交互要求。你如何解决这个问题?

这是我试图在没有用户交互的情况下执行的代码片段,我目前位于<head>元素中:

<script src="http://code.responsivevoice.org/responsivevoice.js"></script>
<script type="text/javascript"> 
    function speak_static_data(){
        responsiveVoice.speak('Test');
    } 
    setTimeout(function(){ speak_static_data(); }, 3000);
</script>

我想responsiveVoice.speak('Test');在没有直接用户交互的情况下调用 iOS 中的页面加载。我该怎么做?

相同的代码片段在桌面上的 Android/Safari/桌面上的 Chrome 上运行良好,但在 iOS 上却不行。

4

1 回答 1

5

所以我一直在寻找这个并隐藏在他们的常见问题解答中,他们有 iOS 指南。他们并没有完全规避它,而是在第一次实例后绕过它。

在 iOS 上,某些事件(例如语音合成)需要通过用户操作(即点击)触发。例如,这会导致 ResponsiveVoice 语音呼叫在页面加载时不起作用。

使用语音合成,用户触发的操作只需执行一次。第一个之后的进一步直接调用将按预期工作。

因此,推荐的最佳实践是在体验中添加一个“开始”按钮供用户单击,并将其用作对 responsiveVoice.speak() 的初始化调用。如果需要,该调用可以有一个空格作为文本,因此对用户没有影响。

您实际上不需要说任何话,因此拥有一个用户只需单击即可调用 responsiveVoice 的按钮就足够了。

<button onclick="responsiveVoice.speak('');">Enable Voice</button>

响应语音常见问题解答: https ://responsivevoice.org/faq/

于 2017-03-07T12:50:16.183 回答