【问题标题】:Safari Audio.play() from blob not supported不支持来自 blob 的 Safari Audio.play()
【发布时间】:2017-04-25 04:06:09
【问题描述】:

我正在尝试从 safari 的缓存中播放 m4a 文件。该错误首先发生在 iOS 上(它是 Meteor Cordova 应用程序,因此它使用 Safari Webview),然后我意识到它也可以在桌面上的 Safari 中重现。我正在使用以下代码来尝试播放音频:

LocalForage.getItem(track_id, (err, value)=>{
    if(err)
        throw err;
    //the loaded value is an arraybuffer of an m4a file
    let blob = new Blob([value]);
    let url = (window.URL || window.webkitURL || window || {}).createObjectURL(blob);
    let testAudio = new Audio(url);
    testAudio.play().then(()=>{console.log("play successful")}).catch((err)=>{console.error(err)});
});

我得到的唯一错误信息是

DOMError: NotSupportedError (Message: "This operation is not supported")

如果您对用于下载到缓存中的代码感兴趣,可以找到in my other question,那里提供的 chrome 修复程序已经实现并且可以工作,但这里的测试代码已尽可能简化。

【问题讨论】:

  • 你有没有发现,是哪一行导致了你所面临的错误?
  • 在倒数第二行,catch() 记录了错误。

标签: javascript ios cordova meteor safari


【解决方案1】:

这是正常行为。 Localstorage 在隐私浏览模式下被 safari 阻止。

【讨论】:

  • 你的意思是iOS上的webview总是在隐私浏览模式下运行吗?此外,如果我在 OSX 上对其进行测试,则未启用隐私浏览并且它也不起作用。您知道如何以不同的方式实现离线缓存吗?
  • 您能否添加更多信息 f.e. Safari 文档的链接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多