teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

実際に試したコードを追加

2018/07/04 00:58

投稿

u39ueda
u39ueda

スコア950

answer CHANGED
@@ -7,7 +7,34 @@
7
7
  ### 追記
8
8
 
9
9
  とりあえず後者の方法を。
10
- loadView()のuserContentControllerをセットしているあたりに以下のコードを追加するだけです。
10
+ ~~loadView()のuserContentControllerをセットしているあたりに以下のコードを追加するだけです。~~
11
+ →実際に試したら動きませんでした。追記2参照
11
12
  ```
12
13
  WebView.configuration.userContentController = userController
13
- ```
14
+ ```
15
+
16
+ ### 追記2
17
+
18
+ 実際に試してみました。
19
+ すみません。どうやらuserContentControllerへの代入だと動作しないようです。
20
+ WebviewにセットしてあるuserContentControllerに直接addすると動作しました。
21
+ あとcallbackHandlerのスペルもミスってたのでそこも直しました。
22
+
23
+ ```
24
+ override func loadView() {
25
+ super.loadView()
26
+ //let webCfg: WKWebViewConfiguration = WKWebViewConfiguration()
27
+ //let userController: WKUserContentController = WKUserContentController()
28
+ //userController.add(self, name: "callbaclHandler")
29
+ //webCfg.userContentController = userController;
30
+ Webview.configuration.userContentController.add(self, name: "callbackHandler")
31
+ Webview.uiDelegate = self
32
+ Webview.navigationDelegate = self
33
+ self.view.addSubview(Webview)
34
+ }
35
+ ```
36
+
37
+ それとこれは回答とは関係ないのですが。
38
+ storyboardで画面を作った場合はloadViewをoverrideしないようにと[リファレンス](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview)に書いてあります。
39
+ loadViewはコードでself.viewを生成する時ぐらいしか使わないと思います。
40
+ ビューの初期化はviewDidLoad()で行いましょう。

1

具体的なコードを追加

2018/07/04 00:58

投稿

u39ueda
u39ueda

スコア950

answer CHANGED
@@ -2,4 +2,12 @@
2
2
 
3
3
  ただしWKWebViewのconfigurationは読み取り専用でinitでしか渡すことができないので。
4
4
  WebViewの生成をstoryboardではなくコードで行うか、webCfgの使用をやめてWebViewのconfigurationにセットするかすればいいでしょう。
5
- 簡単なのは後者でしょうけど。
5
+ 簡単なのは後者でしょうけど。
6
+
7
+ ### 追記
8
+
9
+ とりあえず後者の方法を。
10
+ loadView()のuserContentControllerをセットしているあたりに以下のコードを追加するだけです。
11
+ ```
12
+ WebView.configuration.userContentController = userController
13
+ ```