Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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 HTML5音频播放安全url_Javascript_Ios_Html_Audio - Fatal编程技术网

Javascript HTML5音频播放安全url

Javascript HTML5音频播放安全url,javascript,ios,html,audio,Javascript,Ios,Html,Audio,我们有一个图书播放器应用程序,可以播放故事。在点击页面时,它有该书所有音频URL的摘要。当您更改页面时,音频应自动播放。在桌面上,这一切正常,而在iOS safari上,如果没有直接的用户交互,它将无法播放。这意味着调用堆栈必须有一个用户单击事件,这也没关系,因为每次页面更改都需要单击 然而,我们最近转向了需要签名URL的CDN,我们通过ajax调用对我们的站点进行签名。由于这些URL过期,我们必须在获得签名URL后立即加载音频资产。这意味着,我们现在不是通过更改页面触发加载/播放,而是在更改页

我们有一个图书播放器应用程序,可以播放故事。在点击页面时,它有该书所有音频URL的摘要。当您更改页面时,音频应自动播放。在桌面上,这一切正常,而在iOS safari上,如果没有直接的用户交互,它将无法播放。这意味着调用堆栈必须有一个用户单击事件,这也没关系,因为每次页面更改都需要单击

然而,我们最近转向了需要签名URL的CDN,我们通过ajax调用对我们的站点进行签名。由于这些URL过期,我们必须在获得签名URL后立即加载音频资产。这意味着,我们现在不是通过更改页面触发加载/播放,而是在更改页面时触发URL签名。理想情况下,URL签名的响应应该能够触发音频播放,但是,
onreadystatechange
将成为调用堆栈的根。由于这不再在
click
事件的调用堆栈中,因此在页面上播放音频现在是一个两步过程,这是不理想的

在我看来,我们有几个选择:

  • 在开始阅读本书时预加载所有音频(这很愚蠢,因为这可能是数百MB)
  • 对所有音频进行预签名,将过期时间设置为较长时间(这很愚蠢,因为这实际上绕过了安全CDN)
还有其他人必须处理这样的事情吗?你是怎么做到的?有人能看到我错过的其他选择吗