Soundcloud iframe ne fonctionne pas avec UIWebView swift

J'utilise iframe et 'Widget API' pour contrôler le streaming. Quand j'appelle 'Play (); ou 'Pause ()' le button de lecture change mais ne lit pas l'audio.

@IBOutlet weak var videoWebView: UIWebView! var soundCloudIsLoaded : Bool = false var isPlaying : Bool = false override func viewDidLoad() { super.viewDidLoad() self.videoWebView.isUserInteractionEnabled = true self.videoWebView.allowsInlineMediaPlayback = true var htmlSsortingng = "<iframe id=\"sc-widget\" width=\"100%\" height=\"350\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F1848538&amp;color=ff5500&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=false&amp;show_reposts=false&amp;buying=false&amp;liking=false&amp;download=false&amp;sharing=false&amp;show_artwork=false&amp;show_playcount=false\" playsinline></iframe><script src=\"https://w.soundcloud.com/player/api.js\" type=\"text/javascript\"></script><script type=\"text/javascript\">var duration = 0;var position = 0;var isLoaded = false;var isPaused = true;var widgetIframe = document.getElementById('sc-widget'), widget = SC.Widget(widgetIframe), newSoundUrl = '{{url}}';widget.load(newSoundUrl, { show_artwork: false, hide_related : true, show_comments : false, show_user : false, show_reposts : false, buying : false, liking : false, download : false, sharing : false, show_playcount : false});widget.bind(SC.Widget.Events.READY, function(){ isLoaded = true; widget.getDuration(function(dur){ duration = parseInt(dur); }); setInterval(function() { widget.getDuration(function(dur){ duration = parseInt(dur); }); widget.getPosition(function(pos){ position = parseInt(pos); }); }, 500);});widget.bind(SC.Widget.Events.PLAY, function(){ isPaused = false;});widget.bind(SC.Widget.Events.PAUSE, function(){ isPaused = true;});function Play() { widget.play();}function Pause() { widget.pause();}function Toggle() { widget.toggle();}function SeekTo(milliseconds) { widget.seekTo(milliseconds); widget.getPosition(function(pos){ position = parseInt(pos); }); }function getDuration() { return duration;}function getPosition() { return position;}function soundCloudIsLoaded(){ return isLoaded;}function IsPaused(){ return isPaused;}</script>" htmlSsortingng = htmlSsortingng.replacingOccurrences(of: "{{url}}", with: "URL") self.videoWebView.loadHTMLSsortingng(htmlSsortingng, baseURL: nil) self.videoWebView.delegate = self } @IBAction func playButtonAction(_ sender: Any) { if self.soundCloudIsLoaded { self.isPlaying = !self.isPlaying if self.isPlaying { let _ = self.videoWebView.ssortingngByEvaluatingJavaScript(from: "Play();") self.playButton.setTitle("Pause", for: .normal) } else { let _ = self.videoWebView.ssortingngByEvaluatingJavaScript(from: "Pause();") self.playButton.setTitle("Play", for: .normal) } } } func webViewDidFinishLoad(_ webView: UIWebView) { self.soundCloudIsLoaded = true } 

Dans htmlSsortingng j'ai ce code:

 <iframe id="sc-widget" width="100%" height="350" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F1848538&amp;color=ff5500&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=false&amp;show_reposts=false&amp;buying=false&amp;liking=false&amp;download=false&amp;sharing=false&amp;show_artwork=false&amp;show_playcount=false"></iframe> <script src="https://w.soundcloud.com/player/api.js" type="text/javascript"></script> <script type="text/javascript"> var duration = 0; var position = 0; var isLoaded = false; var isPaused = true; var widgetIframe = document.getElementById('sc-widget'), widget = SC.Widget(widgetIframe), newSoundUrl = '{{url}}'; widget.load(newSoundUrl, { show_artwork: false, auto_play : false, hide_related : true, show_comments : false, show_user : false, show_reposts : false, buying : false, liking : false, download : false, sharing : false, show_playcount : false }); widget.bind(SC.Widget.Events.READY, function(){ isLoaded = true; widget.getDuration(function(dur){ duration = parseInt(dur); }); setInterval(function() { widget.getPosition(function(pos){ position = parseInt(pos); }); widget.getDuration(function(dur){ duration = parseInt(dur); }); }, 500); }); widget.bind(SC.Widget.Events.PLAY, function(){ isPaused = false; }); widget.bind(SC.Widget.Events.PAUSE, function(){ isPaused = true; }); function Play() { widget.play(); } function Pause() { widget.pause(); } function Toggle() { widget.toggle(); } function SeekTo(milliseconds) { widget.seekTo(milliseconds); widget.getPosition(function(pos){ position = parseInt(pos); }); } function getDuration() { return duration; } function getPosition() { return position; } function soundCloudIsLoaded(){ return isLoaded; } function IsPaused(){ return isPaused; } </script> 

Ce code fonctionnait bien, mais il a cessé de fonctionner soudainement sur IOS webView. Cela fonctionne très bien sur Desktop Browser.

Remplacez simplement UIWebView par WKWebView:

 import UIKit import WebKit class ViewController: UIViewController { @IBOutlet weak var playButton: UIButton! var isPlaying : Bool = false var webView: WKWebView? override func viewDidLoad() { super.viewDidLoad() let webConfiguration = WKWebViewConfiguration() webView = WKWebView(frame: self.view.bounds, configuration: webConfiguration) if let webView = webView { self.view.addSubview(webView) let viewBindingsDict = ["subView": webView] view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat:"H:|[subView]|", options: [], mesortingcs: nil, views: viewBindingsDict)) view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat:"V:|[subView]|", options: [], mesortingcs: nil, views: viewBindingsDict)) self.view.bringSubview(toFront: self.playButton) var htmlSsortingng = "<iframe id=\"sc-widget\" width=\"100%\" height=\"350\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F1848538&amp;color=ff5500&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=false&amp;show_reposts=false&amp;buying=false&amp;liking=false&amp;download=false&amp;sharing=false&amp;show_artwork=false&amp;show_playcount=false\" playsinline></iframe><script src=\"https://w.soundcloud.com/player/api.js\" type=\"text/javascript\"></script><script type=\"text/javascript\">var duration = 0;var position = 0;var isLoaded = false;var isPaused = true;var widgetIframe = document.getElementById('sc-widget'), widget = SC.Widget(widgetIframe), newSoundUrl = '{{url}}';widget.load(newSoundUrl, { show_artwork: false, hide_related : true, show_comments : false, show_user : false, show_reposts : false, buying : false, liking : false, download : false, sharing : false, show_playcount : false});widget.bind(SC.Widget.Events.READY, function(){ isLoaded = true; widget.getDuration(function(dur){ duration = parseInt(dur); }); setInterval(function() { widget.getDuration(function(dur){ duration = parseInt(dur); }); widget.getPosition(function(pos){ position = parseInt(pos); }); }, 500);});widget.bind(SC.Widget.Events.PLAY, function(){ isPaused = false;});widget.bind(SC.Widget.Events.PAUSE, function(){ isPaused = true;});function Play() { widget.play();}function Pause() { widget.pause();}function Toggle() { widget.toggle();}function SeekTo(milliseconds) { widget.seekTo(milliseconds); widget.getPosition(function(pos){ position = parseInt(pos); }); }function getDuration() { return duration;}function getPosition() { return position;}function soundCloudIsLoaded(){ return isLoaded;}function IsPaused(){ return isPaused;}</script>" htmlSsortingng = htmlSsortingng.replacingOccurrences(of: "{{url}}", with: "https://soundcloud.com/hunterhayesofficial/rescue") webView.loadHTMLSsortingng(htmlSsortingng, baseURL: nil) } } @IBAction func playButtonAction(_ sender: Any) { self.isPlaying = !self.isPlaying if self.isPlaying { let _ = webView?.evaluateJavaScript("Play();") { [weak self] responce, error in guard error == nil else { print("An error occured: \(Ssortingng(describing: error?.localizedDescription))") return } self?.playButton.setTitle("Pause", for: .normal) } } else { let _ = webView?.evaluateJavaScript("Pause();") { [weak self] responce, error in guard error == nil else { print("An error occured: \(Ssortingng(describing: error?.localizedDescription))") return } self?.playButton.setTitle("Play", for: .normal) } } } } 

entrez la description de l'image ici