在WebView中显示iTunes链接(防止重定向)?

时间:2017-01-22 03:23:40

标签: ios swift uiwebview itunes

我想在UIWebView中显示iTunes链接,例如https://itunes.apple.com/us/album/burn-that-broken-bed/id1120162623?i=1120163074&uo=4

问题是这些链接在浏览器中加载后会自动重定向到iTunes应用程序,而不是像我正在尝试的那样显示UIWebView中的内容。

我如何(1)阻止重定向以便显示内容(2)是否有另一种方法来形成不会重定向的iTunes链接? (3)任何其他选择?

使用ThunderStruck的代码更新:结果: enter image description here

1 个答案:

答案 0 :(得分:3)

可能的解决方法是请求网站的桌面模式,该模式将显示预期的内容而不是重定向您。

使用UIWebView:

UserDefaults.standard.register(defaults: ["UserAgent": "Custom-Agent"])

确保在加载URLRequest之前注册此自定义代理。请注意,此方法适用于应用程序中的所有UIWebView个对象。如果您只想加载某些特定视图来加载桌面版本,则需要使用WKWebView,如下所示,因为它允许您为每个对象使用自定义代理。

使用WKWebView:

首先,您必须import WebKit。然后,像这样初始化它:

let url = URL(string: "https://itunes.apple.com/us/album/burn-that-broken-bed/id1120162623?i=1120163074&uo=4")!
let wkWebView = WKWebView(frame: self.view.frame, configuration: WKWebViewConfiguration())
wkWebView.uiDelegate = self     // Optional line - must conform to WKUIDelegate
// the line below specifies the custom agent, which allows you to request the desktop version of the website
wkWebView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
wkWebView.load(URLRequest(url: url))
self.view.addSubview(wkWebView)

更新:(集成WKWebView)

不幸的是,从XCode 8开始,您无法在IB中添加WKWebView,因此您必须以编程方式添加它。这里的好消息是,您可以使用在IB中创建的UIWebView的frame来轻松简化WKWebView对象的编程实例化

检查出来:(未经测试的代码)

// for ease of use
extension WKWebView {
    func setDesktopMode(on: Bool) {
        if on {
            customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
            return
        }
        customUserAgent = nil
    }
}

并在您的自定义单元格文件中

class MyCustomCell: UICollectionViewCell {
    var wkWebView: WKWebView!    // add this line
    @IBOutlet weak var webView: UIWebView!     // the one you created in IB
}

然后在你的UIViewController

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellIdentifier", for: indexPath) as! MyCustomCell

    let url = URL(string: "url here")!

    cell.wkWebView = WKWebView(frame: cell.webView.frame, configuration: WKWebViewConfiguration())   // using the webView's frame that was created in IB
    cell.wkWebView.uiDelegate = self     // Optional line - must conform to WKUIDelegate
    cell.wkWebView.setDesktopMode(on: true)  // true = loads desktop mode (for your iTunes URLs)
    cell.wkWebView.load(URLRequest(url: url))


    return cell
}