Saya memiliki UIWebView yang sangat sederhana dengan konten dari bundel aplikasi saya. Saya ingin tautan apa pun dalam tampilan web dibuka di Safari alih-alih dalam tampilan web. Apakah ini mungkin?
ios
uiwebview
mobile-safari
David Beck
sumber
sumber
Jawaban:
Tambahkan ini ke delegasi UIWebView:
(diedit untuk memeriksa jenis navigasi. Anda juga dapat melewati
file://
permintaan yang merupakan tautan relatif)Versi Swift:
Versi Swift 3:
Versi Swift 4:
Memperbarui
Seperti yang
openURL
telah ditinggalkan di iOS 10:sumber
switch
lebih disukai untuk tipe enumJika ada yang bertanya-tanya, solusi Drawnonward akan terlihat seperti ini di Swift :
sumber
UIWebViewDelegate
Satu komentar cepat untuk jawaban user306253: hati-hati dengan ini, ketika Anda mencoba memuat sesuatu di UIWebView sendiri (yaitu, bahkan dari kode), metode ini akan mencegahnya terjadi.
Yang dapat Anda lakukan untuk mencegah hal ini (terima kasih Wade) adalah:
Anda mungkin juga ingin menangani
UIWebViewNavigationTypeFormSubmitted
danUIWebViewNavigationTypeFormResubmitted
jenisnya.sumber
Jawaban lain memiliki satu masalah: mereka bergantung pada tindakan yang Anda lakukan dan bukan pada tautan itu sendiri untuk memutuskan apakah akan memuatnya di Safari atau di tampilan web.
Sekarang kadang-kadang inilah yang Anda inginkan, yang baik-baik saja; tetapi di lain waktu, terutama jika Anda memiliki tautan jangkar di halaman Anda, Anda benar-benar ingin membuka hanya tautan eksternal di Safari, dan bukan yang internal. Dalam hal ini Anda harus memeriksa
URL.host
properti permintaan Anda.Saya menggunakan potongan kode itu untuk memeriksa apakah saya memiliki nama host di URL yang sedang diuraikan, atau apakah html yang disematkan:
Tentu saja Anda dapat menyesuaikan ekspresi reguler agar sesuai dengan kebutuhan Anda.
sumber
if (request.URL?.scheme != "file")
Di Swift Anda dapat menggunakan kode berikut:
Pastikan Anda memeriksa nilai URL dan Tipe navigasi.
sumber
Inilah Xamarin iOS yang setara dengan jawaban drawonward.
sumber
Jawaban yang diterima tidak berfungsi.
Jika halaman Anda memuat URL melalui Javascript, itu
navigationType
akan menjadiUIWebViewNavigationTypeOther
. Yang, sayangnya, juga mencakup pemuatan laman latar belakang seperti analitik.Untuk mendeteksi navigasi halaman, Anda perlu membandingkannya
[request URL]
dengan[request mainDocumentURL]
.Solusi ini akan berfungsi dalam semua kasus:
sumber
Catatan penolakan aplikasi:
Akhirnya
UIWbView
mati dan Apple tidak akan lagi menerimanya.Apple mulai mengirim email ke semua pemilik Aplikasi yang masih menggunakan
UIWebView
:Penggunaan API yang Tidak Digunakan - Apple akan berhenti menerima pengiriman aplikasi yang menggunakan
UIWebView
API.Apple memperlakukan Privasi Pengguna dengan sangat serius dan jelas bahwa mereka tidak akan mengizinkan tampilan web yang tidak aman .
Jadi jangan hapus UIWebView dari aplikasi Anda sesegera mungkin. jangan gunakan coba gunakan
UIWebView
di aplikasi baru yang dibuat dan saya lebih suka menggunakanWKWebView
jika mungkinContoh:
sumber
Dalam kasus saya, saya ingin memastikan bahwa semua yang ada di tampilan web membuka Safari kecuali beban awal dan jadi saya menggunakan ...
sumber