2017-01-22 8 views
6

UIWebViewにiTunesリンクを表示したいとします。 https://itunes.apple.com/us/album/burn-that-broken-bed/id1120162623?i=1120163074&uo=4WebViewの内部にiTunesリンクを表示します(リダイレクトを防止します)?

問題がブラウザにロードされ、これらのリンクは、自動的に、むしろ私がしようとしてるようUIWebViewの内容を示すよりも、iTunesのアプリにリダイレクトするということです。

(1)コンテンツが表示されるようにリダイレクトを防止する方法(2)リダイレクトされないiTunesリンクを形成する別の方法はありますか? (3)その他のオプション? ThunderStruckのコードを使用して結果:

更新 enter image description here

+1

Webビューで表示する特別な理由はありますか?そうでない場合は、実際のアプリケーションページとそのボタンをインストールするSKStoreProductViewControllerポップアップを常に使用することができます。 –

+0

私はウェブビューのコレクションビューを提示しています。iTunesリンクは、ユーザーに表示したいセルのタイプの1つです。つまり、SoundCloud YouTube Spotifyなどと一緒です。 – GarySabo

答えて

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を追加することはできません。プログラム的に(未テストコード)

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

そして、あなたの中に:ここで良いニュースは、あなたがこのうちのわずかWKWebViewオブジェクト

チェックのプログラムでインスタンス化を容易にするためにあなたはIBで作成したのUIWebViewのframeを使用することができるということですカスタムセルファイル

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

これは素晴らしいソリューションです...私の使用には完璧ではありません私のコレクションビュー(Amazon、SoundCloud、Spotifyなど)に他のiTunes以外のURLをロードしているにもかかわらず、あなたはその質問に答えるためのクレジットを与えています。 – GarySabo

+0

各コレクションビューのセルにはUIWebViewがありますか?その場合、代わりにWKWebViewに変更して、必要に応じてセルごとに 'customUserAgent'を指定することができます。そうでない場合は、それが何であるか教えてください。そうすれば、あなたの質問によく合うように自分の答えを更新しようとすることができます。ちょうどそれがあなたのために公正であることを望みます:-) – ThunderStruct

+0

ありがとう!はい、各コレクションビューのセルにはUIWebViewがあり、IBからドラッグアンドドロップできないので、WKWebViewに変更する方法はわかりませんでしたか?言い換えれば、UIWebViewは、インターフェイスビルダーでカスタムセルにドロップできるすべてです。 – GarySabo

関連する問題