Pertanyaan kedua sebenarnya lebih mudah dijawab. Lihatlah stringWithContentsOfURL:encoding:error:
metode NSString - ini memungkinkan Anda mengirimkan URL sebagai instance NSURL (yang dapat dengan mudah digunakan dari NSString) dan mengembalikan string dengan konten lengkap dari halaman di URL itu. Sebagai contoh:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Setelah menjalankan kode ini, googlePage
akan berisi HTML untuk www.google.com, dan error
akan mengandung kesalahan yang ditemukan dalam pengambilan. (Anda harus memeriksa konten error
setelah pengambilan.)
Pergi ke arah lain (dari UIWebView) agak rumit, tetapi pada dasarnya konsep yang sama. Anda harus menarik permintaan dari tampilan, lalu lakukan pengambilan seperti sebelumnya:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDIT: Kedua metode ini mendapatkan performa yang baik, karena mereka melakukan permintaan dua kali. Anda dapat menyiasatinya dengan mengambil konten dari UIWebView yang saat ini dimuat menggunakan stringByEvaluatingJavascriptFromString:
metodenya, seperti:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Ini akan mengambil konten HTML saat ini dari tampilan menggunakan Model Objek Dokumen, parsing JavaScript, lalu berikan kepada Anda sebagai NSString * dari HTML.
Cara lain adalah dengan melakukan permintaan Anda secara terprogram terlebih dahulu, lalu muat UIWebView dari apa yang Anda minta. Katakanlah Anda mengambil contoh kedua di atas, di mana Anda memiliki NSString *page
hasil panggilan stringWithContentsOfURL:encoding:error:
. Anda kemudian dapat mendorong string itu ke tampilan web menggunakan loadHTMLString:baseURL:
, dengan asumsi Anda juga memegang NSURL yang Anda minta:
[yourWebView loadHTMLString:page baseURL:requestURL];
Saya tidak yakin, bagaimanapun, apakah ini akan menjalankan JavaScript yang ditemukan di halaman yang Anda muat (nama metode loadHTMLString
,, agak ambigu, dan dokumen tidak banyak bicara tentang hal itu).
Untuk info lebih lanjut:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
telah menjadi penyelamat bagi saya beberapa kali sekarang. Tampaknya kembali dari dokumen sebanyak mungkin.jika Anda ingin mengekstrak konten UIWebView yang sudah dimuat, -stringByEvaluatingJavaScriptFromString. Sebagai contoh:
sumber
Untuk mendapatkan seluruh data mentah HTML (dengan
<head>
dan<body>
):sumber
Perhatikan bahwa NSString stringWithContentsOfURL akan melaporkan string agen-pengguna yang sama sekali berbeda dari UIWebView yang membuat permintaan yang sama. Jadi jika server Anda mengetahui agen-pengguna, dan mengirim kembali html berbeda tergantung pada siapa yang memintanya, Anda mungkin tidak mendapatkan hasil yang benar dengan cara ini.
Perhatikan juga bahwa yang
@"document.body.innerHTML"
disebutkan di atas hanya akan menampilkan apa yang ada di tag tubuh. Jika Anda menggunakan,@"document.all[0].innerHTML"
Anda akan mendapatkan kepala dan tubuh. Yang masih bukan isi lengkap dari UIWebView, karena tidak akan mendapatkan kembali tag! Doctype atau html, tetapi jauh lebih dekat.sumber
Untuk membaca:-
Untuk mengubah:-
sumber
Di Swift v3:
sumber
(Xcode 5 iOS 7) Contoh Aplikasi Universal untuk iOS 7 dan Xcode 5. Ini adalah proyek / contoh sumber terbuka yang terletak di sini: Tautan ke SimpleWebView (Contoh Proyek dan Contoh Kode Sumber)
sumber
Saya menggunakan ekstensi cepat seperti ini:
sumber
Anda harus mencoba ini:
sumber
UIWebView
dapatkan HTML dari UIWebView`
atur HTML ke UIWebView
[dapatkan / atur HTML dari WKWebView]
sumber