web-dev-qa-db-fra.com

Définir WKWebViewConfiguration sur WKWebView à partir de Nib ou de Storyboard

Avec iOS 11, Apple a ajouté la possibilité d'ajouter des prises WKWebViews sur vos plumes et vos story-boards. Cela semble fonctionner correctement lorsque vous utilisez la configuration par défaut WKWebViewConfiguration configurée automatiquement. 

Cependant, j'aimerais pouvoir utiliser un WKWebViewConfiguration personnalisé. Est-il possible de régler cela avant ou après l'initialisation de WKWebView à partir de la nib?

9
Matt.M

Exemple de votre configuration de personnaliser.

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

Vous pouvez essayer ceci:

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

Il n'est pas possible de définir la configuration de WKWebView via la sortie de WKWebView à partir du storyboard car la propriété de configuration de WKWebView est en lecture seule. Nous devons plutôt configurer par programme comme indiqué ci-dessous.

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!)
}

Et implémentez la méthode WKScriptMessageHandler delegate

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

J'espère que cela t'aides... 

1
Ramprasad A