我已经编写了phoneGap / Cordova代码,其中包括一些iframe中的soundcloud小部件播放器。该代码在Android和iOS下的桌面浏览器中运行良好。
今天,iOS版本停止播放音乐。我还尝试在移动safari中以及在不同的iPhone和模拟器上运行该代码,但结果相同。
所有其他平台仍按预期运行。
Xcode控制台未显示任何异常,但移动浏览器显示了错误:
>Unsafe JavaScript attempt to access frame with URL http://domainname/ from frame with URL http://w.soundcloud.com/player/?url=http://api.soundcloud.com/tracks/12345. Domains, >protocolls and ports must match.
我不确定以前是否曾经到过那里,但这是我能找到的最好的。
这是代码的相应部分:
SC.get('/resolve', {
url : 'http://soundcloud.com/' + trackURL[c]
}, function(track) {
SC.get('/tracks/' + track.id + '/comments', function(comments) {
if (c == 0) {
$("#track1").append("<div style='height:110px; white-space:normal;overflow:visible;'> <img src='" + track.artwork_url + "' class='trackTitle' > <img src='img/play.png' id='play1' class='mainPlay'/> <h3 style='margin-top:75px;margin-left:120px; font-size:10px; position:absolute; line-height:10px;'> " + track.title + "</h3></div>");
$("#track1").css("background", "none");
$('#sc-widget1').attr("src", "http://w.soundcloud.com/player/?url=http://api.soundcloud.com/tracks/" + trackID[0]);
}
var widgetIframe = document.getElementById('sc-widget1');
widget1 = SC.Widget(widgetIframe);
$("#play1").on('click', function() {
widget1.toggle();
}
我想知道这是否真的是跨域问题。非常感谢您的帮助。
谢谢!
小附录:在物理iPhone上运行时,有时会得到:
Failed to load webpage with error: The operation couldn’t be completed. (NSURLErrorDomain error -999.)
但这并非总是如此,并且对(非)功能没有影响。
最佳答案
这可能是由于soundcloud js播放器将从某些浏览器定义为不安全的soundcloud的域(JSON和实际音频)加载资源的事实。
您可以通过使用通配符'*'来尝试按照http://docs.phonegap.com/en/1.9.0/guide_whitelist_index.md.html将所有域列入白名单,以查看是否可行。如果是这样,则可以将白名单的范围缩小到要从中加载内容的特定域。
我还刚刚注意到,您的代码中有一个w.soundcloud.com的引用,单个w是否正确?