1. kz56cd

    No comment

    kz56cd
Changes in title
-UIWebViewでwebページ内のボタン等を制御する
+【iOS】UIWebViewでwebページ内のボタン等を制御する
Changes in body
Source | HTML | Preview
@@ -1,93 +1,88 @@
## 経緯
該当画面はUIWebViewで表示した際、「閉じる」ボタンが効かなかった。
ボタン押下時は閉じるのではなく、一画面戻したかった為、方法を探った。
-
-## 概要
-
-
-
## 方法
jsを書き換える為のファイルを用意、プロジェクト内に格納:
-```js:
+```js:JS_WebViewController.txt
window.close = function () {
history.back();
};
```
`window.close()`を`history.back()`で書き換えているだけ、シンプル。
次、
`webViewDidFinishLoad`で先のファイルを読込、書き換え:
-```objc:
+```objc:WebViewController.m
// URL読込後
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSError *error = nil;
NSString *jsFromFile = [NSString stringWithContentsOfURL:[[NSBundle mainBundle]
URLForResource:@"JS_WebViewController" withExtension:@"txt"]
encoding:NSUTF8StringEncoding error:&error];
__unused NSString *jsOverrides = [webView
stringByEvaluatingJavaScriptFromString:jsFromFile];
}
```
## 応用
urlスキーマ使えば、objC側でもっと自由にやれる:
-```js:
+```js:JS_WebViewController.txt
window.close = function () {
open("native://close");
};
```
同じく`webViewDidFinishLoad`で書き換える:
-```objc:
+```objc:WebViewController.m
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSError *error = nil;
NSString *jsFromFile = [NSString stringWithContentsOfURL:[[NSBundle mainBundle]
- URLForResource:@"JS_SettingWebViewController" withExtension:@"txt"]
+ URLForResource:@"JS_WebViewController" withExtension:@"txt"]
encoding:NSUTF8StringEncoding error:&error];
__unused NSString *jsOverrides = [webView stringByEvaluatingJavaScriptFromString:jsFromFile];
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *scheme = [request.URL.scheme stringByAppendingString:@":"];
scheme = [scheme stringByAppendingString:request.URL.resourceSpecifier];
if ([scheme isEqualToString:@"native://close"]) {
/*
*
* Do Something!!!!!!!!!!!!!!!!!!
*
*/
[self dismissViewControllerAnimated:YES completion:nil];
return NO;
}
else {
return YES;
}
}
```
スキーマは`request.URL.scheme`と`request.URL.resourceSpecifier`で取得して判定してる
## 参考
- [iOS UIWebView Handle window.open/window.close PopUp Page](http://brainwashinc.com/2014/01/06/ios-uiwebview-handle-window-openwindow-close-popup-page/)