2017-01-22 47 views
6

Bir iTunes bağlantısını UIWebView, ör. https://itunes.apple.com/us/album/burn-that-broken-bed/id1120162623?i=1120163074&uo=4iTunes'u bir Web Görünümü'nün içine bağlayın (yönlendirmeyi engelleyin)?

Sorun, bir tarayıcıya yüklendiğinde bu bağlantıların, içeriği yapmaya çalıştığım sırada içeriği UIWebView'da göstermek yerine otomatik olarak iTunes uygulamasına yeniden yönlendirilmesidir. içerik yönlendirme olmayacak iTunes linki oluşturmak için başka bir yolu yoktur (2) görüntülenecek şekilde

Nasıl ya (1) yönlendirme önleyebilir? (3) diğer seçenekler? Yıldırım çarpmış kodunu kullanarak sonuç:

Güncelleme enter image description here

+1

Web görünümde göstermek istediğiniz belirli bir sebep var mı? Değilse, her zaman gerçek uygulama sayfasını görüntüleyecek olan bir SKStoreProductViewController açılır ve bunu yüklemek için bir düğme kullanabilirsiniz. –

+0

Web görünümlerinden oluşan bir koleksiyon görünümü sunarım ve iTunes bağlantıları, kullanıcıya göstermek istediğim hücre türlerinden biri. Örneğin SoundCloud YouTube Spotify ile birlikte – GarySabo

cevap

3

olası iş çevresinde yönlendiriyor yerine amaçlanan içeriği görüntüler web sitesinin masaüstü modu talep etmektir.

kullanma UIWebView:

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

Eğer URLRequest yükleniyor önce bu özel ajan kayıt emin olun. Bu yöntemin, uygulamanızdaki tüm UIWebView nesneleri için geçerli olacağını unutmayın. Masaüstü sürümünü yüklemek için yalnızca belirli görünümler istiyorsanız, WKWebView'u aşağıdaki gibi kullanın; nesne başına özel bir aracı kullanmanıza izin verdiği için.

kullanma WKWebView:

Öncelikle yapmanız gerekir 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) 

Güncelleme:

Maalesef (WKWebView entegre) kullanarak, XCode 8 gibi IB bir WKWebView ekleyemezsiniz, bu yüzden eklemek gerekecek Sonra bunu böyle başlatmak programlı. Burada iyi haber size biraz WKWebView nesne

Kontrol şuna programatik örnekleme kolaylaştırmak için IB oluşturulan UIWebView arasında frame kullanabilirsiniz olmasıdır: (denenmemiş kodu)

// 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 
    } 
} 

Ve de senin özel hücre dosyası UIViewController Sonra

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

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 
} 
+0

Bu harika bir çözüm ... kullanımım için mükemmel değil Diğer non-iTunes Urls'ları koleksiyonumun içine yüklerken (örneğin Amazon, SoundCloud, Spotify vb.) yine de soruyu cevaplamak için size kredi vermekteyim. – GarySabo

+0

Yani her koleksiyon görünümü hücresinde bir UIWebView var mı?Bu durumda, onları WKWebView olarak değiştirmeye çalışın, böylece hücre başına 'customUserAgent 'değerini ihtiyacınıza göre belirtebilirsiniz. Eğer durum böyle değilse, bana ne olduğunu söyleyin, böylece cevabımı, sorunuzu daha iyi uyacak şekilde güncellemeye çalışabilirim. Sadece senin için adil olmasını istiyorum :-) – ThunderStruct

+0

Teşekkürler! Evet, her bir koleksiyon görünümü hücresinde bir UIWebView var, IB'den sürükleyip bırakmak mümkün olmadığından bunları WKWebView'a nasıl değiştireceğimi anlayamadım. Başka bir deyişle, UIWebView, arayüz oluşturucuda özel bir hücreye düşmek için kullanılabilir. – GarySabo