さまざまなURLを循環できるWebビューがあります。あるものから別のものに切り替えるとき、次のページをロードする前に古いWebページを非表示にします。 Webビューを再割り当てせずにこれを行うにはどうすればよいですか?
[self.webView loadHTMLString:@"" baseURL:nil];
と同じ関数に自分のURLをロードすると、前のWebページがまだ残ります。
[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.pageURL]];
編集:これは明らかにあなたにとって十分に明確ではありません。以下のコードはWebビューをクリアしません。新しいページが読み込まれるまで前のページを表示します。
- (void) startLoadOfNextURL:(NSURL*)url
{
// clear:
[self.webView loadHTMLString:@"" baseURL:nil]; //DOESNT WORK
// Load real next URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
コントローラが終了する間、以下のコードを書くことができます。
webView.load(URLRequest(url: URL(string:"about:blank")!))
空白のページを読み込むようにすることができます
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
- loadHTMLString:baseURL:
を呼び出すと、読み込みが完了するまでブロックされません。リクエストを記録すると、バックグラウンドで戻り、ロードされます。
その結果、新しいロード要求を開始する前に、最初のロードが完了するのを待つ必要があります。
UIWebView
では、UIWebViewDelegate
の- webViewDidFinishLoad:
を使用します。
WKWebViewでは、WKNavigationDelegate
の- webView:didFinishNavigation:
を使用します
デリゲートメソッドなしでコンテンツを本当にクリアしたい場合の別のアプローチは、JavaScriptを使用することです(例 https://stackoverflow.com/a/4241420/3352624 )。次に、UIWebViewの場合、- stringByEvaluatingJavaScriptFromString:
を呼び出すことができます。このメソッドは、JavaScriptが実行されて戻るまで実行をブロックします。
WKWebView
の場合、- evaluateJavaScript:completionHandler:
はブロックしないため、 https://stackoverflow.com/a/30894786/3352624 のようにする必要があります。
「古いWebページを非表示にする」だけにしたい場合は、一時的に空のUIViewでWebビューのコンテンツ領域を覆うことができます。ロードを開始するときにコンテンツを非表示にし、ロードが完了した後、上記のデリゲートメソッドを使用してコンテンツを表示できます。
次のコードは、画面をクリアしてから移動します
スウィフト
webView.evaluateJavaScript("document.documentElement.remove()") { (_, _) in
self.webView.load(urlRequest)
}
代わりにJavaScriptを使用してください。
webView.evaluateJavaScript("document.body.remove()")
スウィフト
webView.load(URLRequest(url: URL(string: "about:blank")!))
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
//Load request or write code here
})