サーチ…
備考
UIWebViewデリゲート関数: -
客観的 - Cの降臨
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType;
- (void)webView:(UIWebView *)webView
didFailLoadWithError:(NSError *)error;
- (void)webViewDidFinishLoad:(UIWebView *)webView;
- (void)webViewDidStartLoad:(UIWebView *)webView;
UIWebViewインスタンスを作成する
迅速
let webview = UIWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
目標-C
UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
//Alternative way of defining frame for UIWebView
UIWebView *webview = [[UIWebView alloc] init];
CGRect webviewFrame = webview.frame;
webviewFrame.size.width = 320;
webviewFrame.size.height = 480;
webviewFrame.origin.x = 0;
webviewFrame.origin.y = 0;
webview.frame = webviewFrame;
URLリクエストの作成
url
からWebviewのコンテンツを読み込む
迅速
webview.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.com")!))
目標-C
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
Webコンテンツの読み込みを停止する
メソッドstopLoading()
は、 stopLoading()
の現在のロードプロセスを停止します。
迅速
webview.stopLoading()
目標-C
[webview stopLoading];
現在のWebコンテンツをリロードする
迅速
webview.reload()
目標-C
[webview reload];
コンテンツサイズの決定
多くの場合、たとえばテーブルビューのセルでWebビューを使用する場合は、レンダリングされたHTMLページのコンテンツサイズを決定することが重要です。ページをロードした後、これはUIWebViewDelegate
デリゲートメソッドで計算できます。
- (void) webViewDidFinishLoad:(UIWebView *) aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;
NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}
このコードでは、フィッティングサイズを測定する前に、Webビューの高さを1に近づけるという追加のトリックを採用しています。さもなければ、それは単に現在のフレームサイズを報告するでしょう。測定後、直ちに高さを実際のコンテンツの高さに設定します。
HTML文字列を読み込む
Webビューは、ローカルで生成されたHTML文字列をロードするのに便利です。
NSString *html = @"<!DOCTYPE html><html><body>Hello World</body></html>";
[webView loadHTMLString:html baseURL:nil];
迅速
let htmlString = "<h1>My First Heading</h1><p>My first paragraph.</p>"
webView.loadHTMLString(htmlString, baseURL: nil)
ローカルのベースURLを指定することができます。これは、アプリケーションバンドルからイメージ、スタイルシート、またはスクリプトを参照するのに便利です:
NSString *html = @"<!DOCTYPE html><html><head><link href='style.css' rel='stylesheet' type='text/css'></head><body>Hello World</body></html>";
[self loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];
この場合、 style.css
はアプリケーションのリソースディレクトリからローカルにロードされます。もちろん、リモートURLを指定することもできます。
JavaScriptを読み込む
stringByEvaluatingJavaScriptFromString()
メソッドを使用してUIWebView
カスタムJavaScriptを実行できます。このメソッドは、scriptパラメータで渡されたJavaScriptスクリプトの実行結果を返します。スクリプトが失敗するとnilを返します。
迅速
文字列からスクリプトを読み込む
webview.stringByEvaluatingJavaScriptFromString("alert('This is JavaScript!');")
ローカルファイルからスクリプトをロードする
//Suppose you have javascript file named "JavaScript.js" in project.
let filePath = NSBundle.mainBundle().pathForResource("JavaScript", ofType: "js")
do {
let jsContent = try String.init(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding)
webview.stringByEvaluatingJavaScriptFromString(jsContent)
}
catch let error as NSError{
print(error.debugDescription)
}
目標-C
文字列からスクリプトを読み込む
[webview stringByEvaluatingJavaScriptFromString:@"alert('This is JavaScript!');"];
ローカルファイルからスクリプトをロードする
//Suppose you have javascript file named "JavaScript.js" in project.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"JavaScript" ofType:@"js"];
NSString *jsContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[webview stringByEvaluatingJavaScriptFromString:jsContent];
メモ stringByEvaluatingJavaScriptFromString:
メソッドは、JavaScript評価が完了するまで同期的に待機します。審査していないJavaScriptコードのWebコンテンツを読み込むと、このメソッドを呼び出すとアプリがハングする可能性があります。ベストプラクティスは、 WKWebView
クラスを採用し、代わりにevaluateJavaScript:completionHandler:
メソッドを使用することです。しかし、 WKWebView
はiOS 8.0以降で利用できます。
.pdf、.txt、.docなどのドキュメントファイルをロードする
Webページではなく、.pdf、.txt、.docなどのiOS WebViewにドキュメントファイルを読み込むこともできますloadData
メソッドはNSData
をwebviewにロードするNSData
に使用されます。
迅速
//Assuming there is a text file in the project named "home.txt".
let localFilePath = NSBundle.mainBundle().pathForResource("home", ofType:"txt");
let data = NSFileManager.defaultManager().contentsAtPath(localFilePath!);
webview.loadData(data!, MIMEType: "application/txt", textEncodingName:"UTF-8" , baseURL: NSURL())
目標-C
//Assuming there is a text file in the project named "home.txt".
NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"home" ofType:@"txt"];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:localFilePath];
[webview loadData:data MIMEType:@"application/txt" textEncodingName:@"UTF-8" baseURL:[NSURL new]];
UIWebview内部のリンクをクリック可能にする
vc.hで
@interface vc : UIViewController<UIWebViewDelegate>
vc.mで
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (navigationType == UIWebViewNavigationTypeLinkClicked){
//open it on browser if you want to open it in same web view remove return NO;
NSURL *url = request.URL;
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
return NO;
}
return YES;
}
WebViewにローカルHTMLファイルを読み込む
まず、HTMLファイルをプロジェクトに追加します(ファイルを追加するオプションを選択するように求められた場合は、必要に応じてアイテムをコピーを選択します)
次のコード行は、HTMLファイルの内容をWebViewにロードします
webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("YOUR HTML FILE", ofType: "html")!})
- あなたのHTMLファイルが呼び出された場合のindex.html HTMLファイルを インデックスに置き換えます
- このコードは、 viewDidLoad()またはviewDidAppear()または他の関数で使用できます