Właściwie łatwiej odpowiedzieć na drugie pytanie. Spójrz na stringWithContentsOfURL:encoding:error:
metodę NSString - umożliwia ona przekazanie adresu URL jako instancji NSURL (która może być łatwo utworzona z NSString) i zwraca ciąg z pełną zawartością strony pod tym adresem URL. Na przykład:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Po uruchomieniu ten kod googlePage
będzie zawierał kod HTML witryny www.google.com oraz error
wszelkie błędy napotkane podczas pobierania. (Powinieneś sprawdzić zawartość error
po pobraniu.)
Przejście w drugą stronę (z UIWebView) jest nieco trudniejsze, ale zasadniczo jest to ta sama koncepcja. Będziesz musiał wyciągnąć żądanie z widoku, a następnie wykonać pobieranie jak wcześniej:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDYCJA: Obie te metody mają jednak wpływ na wydajność, ponieważ wykonują żądanie dwukrotnie. Możesz obejść ten problem, pobierając zawartość z aktualnie załadowanego UIWebView za pomocą jego stringByEvaluatingJavascriptFromString:
metody, takiej jak:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Spowoduje to pobranie bieżącej zawartości HTML widoku za pomocą modelu obiektu dokumentu, przeanalizuje JavaScript, a następnie przekaże ją jako NSString * HTML.
Innym sposobem jest najpierw wykonanie żądania programowo, a następnie załadowanie UIWebView z tego, o co prosiłeś. Powiedzmy, że weźmiesz drugi przykład powyżej, w którym masz NSString *page
wynik połączenia z stringWithContentsOfURL:encoding:error:
. Następnie możesz wypchnąć ten ciąg do widoku internetowego za pomocą loadHTMLString:baseURL:
, zakładając, że trzymałeś się również żądanego NSURL:
[yourWebView loadHTMLString:page baseURL:requestURL]
Nie jestem jednak pewien, czy uruchomi to JavaScript znaleziony na ładowanej stronie (nazwa metody,, loadHTMLString
jest nieco niejednoznaczna, a dokumentacja nie mówi o tym zbyt wiele).
Po więcej informacji: