web-dev-qa-db-ja.com

NibまたはStoryboardからWKWebViewにWKWebViewConfigurationを設定します

IOS 11の場合Appleにより、ペン先とストーリーボードにWKWebViewsアウトレットを追加する機能が追加されました。自動的に設定されるデフォルトのWKWebViewConfigurationを使用すると問題なく動作するようです。

ただし、カスタムWKWebViewConfigurationを使用できるようにしたいと思います。とにかく、WKWebViewがnibから初期化される前または後にこれを設定できますか?

12
Matt.M

カスタマイズ構成の例を見てみましょう。

NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

//Here you can customize configuration
[self.webView.configuration.userContentController addUserScript:wkUScript];

// self.webView.navigationDelegate = self;
// self.webView.contentMode = UIViewContentModeScaleAspectFill;
2
Ravi H Malviya

あなたはこれを試すことができます:

let userContentController = WKUserContentController()
self.webView.configuration.userContentController = userContentController
1
Augusto

WKWebViewの構成プロパティは読み取り専用なので、ストーリーボードからWKWebViewのアウトレットを介してWKWebViewの構成を設定することはできません。代わりに、以下のようにプログラムで構成する必要があります。

class ViewController: UIViewController {

    @IBOutlet weak var webContentView: UIView!
    var webView: WKWebView?

    let contentController = WKUserContentController()        
    contentController.add(self, name: "callbackHandler")

    let configuration = WKWebViewConfiguration()
    configuration.userContentController = contentController

    self.webView = WKWebView(frame: self.webContentView.bounds, configuration: configuration)
    self.webContentView.addSubview(self.webView!)
}

WKScriptMessageHandlerデリゲートメソッドを実装します

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if (message.name == "callbackHandler"){
        print("\(message.body)")
    }
}

お役に立てれば...

1
Ramprasad A