1. 程式人生 > >ios 解決第一個頁面是通過loadData或者是loadHtml時返回控制的問題

ios 解決第一個頁面是通過loadData或者是loadHtml時返回控制的問題

else ont 訪問 col 狀態 load atom tro nvi

問題: webView在通過loadData或者loadHtml方法加載到第一個頁面後跳轉到其他的webView後,點擊導航條的返回按鈕時由於webView 的canGoback為NO導致我們返回不了第一個我們通過loadHtml形式進來的web頁。

導致原因:webView 的canGoback是通過url來判定的,加入一個頁面的前一個頁面是通過url的形式來加載進來的,那麽我們此時的canGoback為YES,否則為NO

所以我們加入有類似一下的方法會失敗

-(void)goback{

  if([self.webView canGoback]){

// 在通過loadHtml或者loadData加載進來的網頁跳轉到頁面內的其他鏈接後返回時跳不到最初的網頁

    [self.webView goback];

  }else{

    [self.navigationViewController popViewController:YES];

}

}

不好的方法:通過狀態來判斷是加載到哪個頁面然後控制goback方法,(我最開始是用這種方式嘗試,發現這種方式要涉及webView的委托方法以及控制狀態的值,於是放棄)。

解決辦法及分析:由於是通過loadHtml或者loadData的方式導致回不到最初的頁面,而webView是由於第一個頁面不是通過url加載進來的導致我們無法返回第一個web頁面,那麽我們就想辦法將第一個頁面通過url的形式加載進來那麽一切又回到通過url加載頁面的形式,可以讓網頁自己控制goforward和goback了,所以我們的方法是把拿到的html緩存到本地,然後通過localPath來創建一個url,再通過這個url來訪問第一個web頁,這樣我們的問題就完美解決了。

/... when we have get the data or html text

1. cache the data or html to local file

NSString *html = @"a html text";

NSString *htmlLocalPath = @"somePath";

[html writeToFile:htmlLocalPath atomically:YES encoding:NSUTF8Encoding error:nil];

2.get the html via url from local path

NSURL *url = [NSURL urlWithLocalPath:htmlLocalPath]

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

3.load html with request

[self.webView loadRequest:request];

ios 解決第一個頁面是通過loadData或者是loadHtml時返回控制的問題