SoundCloud Widget外部控制iOS问题
我发现了一个使用外部控件的iOS5上的HTML5小部件的错误,我已经testing了iPhone和iPad。 小部件里面的控件工作正常。 然而,在我的客户端网站http://www.bushytunes.net和小工具api游乐场http://w.soundcloud.com/player/api_playground.html外部控制运行错误。
这里是从小工具操场打印的控制台:
SC.Widget.Events.PLAY {"loadedProgress":null,"currentPosition":0,"relativePosition":0} SC.Widget.Events.PAUSE {"loadedProgress":null,"currentPosition":0,"relativePosition":0} SC.Widget.Events.PLAY {"loadedProgress":null,"currentPosition":0,"relativePosition":0} SC.Widget.Events.PLAY {"loadedProgress":null,"currentPosition":0,"relativePosition":0} SC.Widget.Events.PLAY {"loadedProgress":null,"currentPosition":0,"relativePosition":0} SC.Widget.Events.READY {} Loading...
谢谢,詹姆斯
TL; DR :iOS 6应该可以通过用户操作初始化一个调用的限制,iOS5或更低版本可能不会得到修复。
我们将尝试用某种黑客来解决这个问题,但很可能这很快就不会得到正确的解决scheme。
SoundCloud Widget正在使用HTML5audio在iOS上播放声音。 在iOS中开始播放有两个限制:
- 回放必须由用户操作启动(所以在事件处理程序中)
- 对
audio.play
方法的调用必须位于该事件处理程序的同步调用堆栈中。
这意味着,这工作:
document.querySelector('.play-button').addEventListener('click', function () { audioController.play(); }, false);
但是这不是:
document.querySelector('.play-button').addEventListener('click', function () { setTimeout(function () { audioController.play(); }, 500); }, false);
iframe之间的跨域通信只能以asynchronous方式进行。 我们的实现是使用postMessage
DOM API,但即使是较旧的技术,如使用location.hash
片段标识符消息传递(FIM)也是asynchronous的。 这意味着我们目前还没有看到通过iOS5及以下版本的API启用播放的方式(因为没有Flash后备)。
不过,也有好消息: iOS6已经放弃了No2的限制 。 这意味着只要用户操作调用API调用,就可以播放声音。 即使您的父窗口和小部件的iframe之间的通信仍然是asynchronous的。 不幸的是,iOS还没有放弃这个限制。
我希望这有帮助,我会更新这个答案,以防我们find一个适当的解决方法。
我的build议是用Audio5JS或SoundManager2等库来build立自己的自定义播放器, 以便在iOS上控制播放对您的应用至关重要。
你可以在developer.apple.com资源上看到我所说的模糊描述。
我不能完全知道,如果@ grryzzly试图说这个,但Widget API的外部控件是完全打破了移动 。 答案确实解释了为什么 – 你不能同步告诉iFrame播放声音,但是我的理解是,正确的iframe.contentWindow调用是同步的吗? 我可能是错的。
尝试将您的手机导向小部件API操场: https : //w.soundcloud.com/player/api_playground.html
即使在那里它实际上不玩,除非你按下橙色button。
相当恼人,因为没有应用程序绕过streamAPI的限制。 似乎没有办法让一个每天可能经历超过15,000次请求/播放的站点与移动设备上的SoundCloud一起工作。 我只想连续播放音乐。
- iOS 10:NSInvalidLayoutConstraintException:约束不正确地关联不兼容类型的锚点
- 用CoreGraphics在iPhone上绘制简单线条
- 标签栏控制器如何从一个视图控制器延伸到另一个视图控制器,并保留标签栏?
- 从swift调用objective-C typedef块
- Twitter SLRequest performRequestWithHandler – 无法准备URL请求
- iOS状态栏更改颜色,以自己匹配导航栏
- 如何在Charts框架中的水平条上添加string标签(xAxis标签)
- 使用PHP在ios上通过JSON在web服务器上上传图片
- WCSession – PayloadTooLarge