2017-01-22 43 views
6

Chcę wyświetlić łącze do iTunes na stronie UIWebView, np. https://itunes.apple.com/us/album/burn-that-broken-bed/id1120162623?i=1120163074&uo=4Wyświetl link iTunes wewnątrz WebView (zapobiec przekierowaniu)?

Problem polega na tym, że te linki po załadowaniu w przeglądarce automatycznie przekierowują do aplikacji iTunes, a nie pokazują treści w UIWebView, tak jak próbuję to zrobić.

Jak mogę (1) zapobiec przekierowaniu w celu wyświetlenia zawartości (2) Czy istnieje inny sposób utworzenia linku do iTunes, który nie będzie przekierowywał? (3) Jakieś inne opcje?

Aktualizacja: wynik za pomocą kodu Thunderstruck: enter image description here

+1

Jakiś konkretny powód, dla którego chcesz pokazać to w widoku internetowym? Jeśli nie, zawsze możesz użyć okna podręcznego SKStoreProductViewController, które wyświetli aktualną stronę aplikacji i przycisk, aby ją zainstalować. –

+0

Przedstawiam widok kolekcji odsłon stron, a linki do iTunes należą do jednego z typów komórek, które chcę wyświetlać użytkownikowi, tj. Wraz z SoundCloud YouTube Spotify itp. – GarySabo

Odpowiedz

3

Możliwe obejście jest zwrócić się do pulpitu-mode na stronie internetowej, która będzie się wyświetlać jako zamierzoną treść zamiast przekierowanie.

Korzystanie UIWebView:

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

Upewnij się zarejestrować ten niestandardowy środek przed ładowania URLRequest. Zauważ, że ta metoda miałaby zastosowanie do wszystkich obiektów UIWebView w Twojej aplikacji. Jeśli chcesz, aby tylko niektóre widoki ładowały wersję na komputery, musisz użyć WKWebView w następujący sposób, ponieważ umożliwia to użycie niestandardowego agenta dla każdego obiektu.

Korzystanie WKWebView:

Po pierwsze, musisz import WebKit. Następnie zainicjować to tak:

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) 

Update: (Integracja WKWebView)

Niestety, nie możesz dodać WKWebView w IB jak z XCode 8, więc trzeba go dodać programowo. Dobrą wiadomością jest to, że można użyć frame z UIWebView utworzony w IB do nieco złagodzić programową instancji obiektu WKWebView

to sprawdzić: (kod niesprawdzone)

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

iw swoim niestandardowy plik komórka

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

Następnie w 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

To jest świetne rozwiązanie ... nie idealne do mojego użytku w przypadku, gdy ładuję inne adresy URL innych niż iTunes do mojego widoku kolekcji (np. Amazon, SoundCloud, Spotify itp.), ale daje ci to kredyt za udzielenie odpowiedzi na pytanie. – GarySabo

+0

Więc każda komórka widoku kolekcji ma UIWebView?Jeśli tak jest, spróbuj zmienić je na WKWebView, abyś mógł określić "customUserAgent" na komórkę, aby spełnić twoje potrzeby. Jeśli tak nie jest, powiedz mi, co to jest, więc mógłbym spróbować zaktualizować moją odpowiedź, aby lepiej pasowała do twojego pytania. Po prostu chcę, żeby to było sprawiedliwe :-) – ThunderStruct

+0

Dzięki! Tak, każda komórka widoku kolekcji ma UIWebView, nie mogłem dowiedzieć się, jak zmienić ją na WKWebView, ponieważ nie jest ona dostępna do przeciągania i upuszczania z IB? Innymi słowy, UIWebView to wszystko, co jest dostępne w narzędziu do tworzenia interfejsów, aby przenieść się do niestandardowej komórki. – GarySabo