2017-02-28 72 views
2

使用Swift 3和UIWebView如何強制顯示在通過網頁IFrame播放的YouTube視頻中的YouTube徽標/水印「超鏈接」打開在Safari中?Swift 3 UIWebView在Safari中打開(視頻中的YouTube徽標/水印超鏈接)

我正在使用UIWebView(無法過渡到WKWebView),以顯示在IFrame中播放YouTube視頻的網頁。

https://developers.google.com/youtube/player_parameters?csw=1#modestbranding的「YouTube嵌入式播放器和播放器參數」的指示。我能夠使用showinfo = 0從視頻的頂部刪除標題和分享按鈕。這隻留下YouTube徽標/水印。

當你點擊YouTube徽標/水印它打開我的YouTube應用程序,這是不利於用戶的導航體驗中。

如果用戶點擊YouTube標誌/水印我需要這個鏈接在Safari中打開。我嘗試使用下面顯示的代碼沒有成功。該代碼適用於UIWebView中的所有其他鏈接,但不適用嵌入在實際視頻中的YouTube徽標/水印超鏈接。

// ViewController.swift

進口的UIKit

類的ViewController:UIViewController中,UIWebViewDelegate {

@IBOutlet var webView: UIWebView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    webView.delegate = self 
    if let url = URL(string: "http://www.example.com") { 
     let request = URLRequest(url: url) 
     webView.loadRequest(request) 
    } 
} 


//Force all links to open in Safari. 
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if let url = request.url, navigationType == UIWebViewNavigationType.linkClicked { 
     UIApplication.shared.openURL(url) 
     return false 
    } 
    return true 
}} 

我能夠用在例如在我的應用程序的Android版本來實現這一WebView link click open default browser

我花了一個星期試圖弄清楚這一點,以免與已經回答的問題浪費時間的人。 任何幫助解決這個問題將不勝感激。謝謝!

+0

你知道嗎?我認爲有一次,你需要切換到WKWebView,它比普通的Web視圖更好(它有不同的覆蓋方法) – XcodeNOOB

+0

我也想知道是否曾經爲這個問題找到解決方案 – Rakshasas

回答

0

我在尋找完全相同的解決方案,我想知道如果任何人都可以在這個問題上幫助

我用下面的代碼片段

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == UIWebViewNavigationType.linkClicked { 
     guard let abURL = request.url else { return true } 
     let abRequest = URLRequest(url: abURL) 
     print(abURL) 
     print(abRequest) 
     if abURL.absoluteString.range(of: "youtube") != nil { 
      // Open links in Safari 
      if #available(iOS 10.0, *) { 
       UIApplication.shared.open(abURL, options: [:], completionHandler: nil) 
      } else { 
       UIApplication.shared.openURL(abURL) 
      } 
     } else { 
      // Open links in Webview 
      webView.loadRequest(abRequest) 
     } 
     return false 
    } 
    return true 
} 

線5/6試了一下如果點擊鏈接並點擊視頻中的Youtube水印(作爲iframe包含),我會打印該網址,但是我沒有得到該網址的打印信息,所以我猜測swift並不「知道」鏈接被點擊。所有其他鏈接正在工作並打印網址。

我也包含在裏面

<a href="https://youtube.com">Youtube Link</a> 

而這個鏈接的作品只是一個鏈接到YouTube的iframe,我可以打印網址,並在Safari中打開,這樣的問題必須與YouTube的內部鏈接嵌入容器

相關問題