1. kz56cd

    No comment

    kz56cd
Changes in title
-UIWebViewで表示元のボタン等を制御する
+UIWebViewでwebページ内のボタン等を制御する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -1,72 +1,93 @@
## 経緯
該当画面はUIWebViewで表示した際、「閉じる」ボタンが効かなかった。
ボタン押下時は閉じるのではなく、一画面戻したかった為、方法を探った。
## 概要
## 方法
jsを書き換える為のファイルを用意、プロジェクト内に格納:
-```
+```js:
window.close = function () {
history.back();
};
```
+`window.close()`を`history.back()`で書き換えているだけ、シンプル。
-`webViewDidFinishLoad`でjsを書き換える為のファイルを読み込む
+次、
+`webViewDidFinishLoad`でのファイルを読込、書き換え
-```
+```objc:
// 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:
window.close = function () {
open("native://close");
};
```
+同じく`webViewDidFinishLoad`で書き換える:
-```
+```objc:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSError *error = nil;
NSString *jsFromFile = [NSString stringWithContentsOfURL:[[NSBundle mainBundle]
URLForResource:@"JS_SettingWebViewController" 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/)
+