Swift WKWebView интерфейс с JavaScript не запускается - PullRequest
0 голосов
/ 12 апреля 2019

Я просто создаю свое приложение с WKWebView с swift 4.0 (iOS 12.1)

Мне нужно запустить мой javascript из онлайн-HTML, Однако если я переместить URL-адрес из индекса на другую страницу, мое печатное сообщение не работает вообще.

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

    let configuration = WKWebViewConfiguration()
    configuration.userContentController = contentController

    webview = WKWebView(frame: self.view.frame, configuration: configuration)
    webview.uiDelegate = self
    webview.navigationDelegate = self
    self.view = self.webview


override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "example.com/index") // of course https://
    let request = URLRequest(url: url!)
    webview.load(request)

Я пропустил userContentController при переходе на другую html-страницу в webView. Индексная страница может вызывать эту, но другая страница не вызывает никакой функции.

index.html (ok) -> ссылка на a.html -> a.html (не в порядке) -> ссылка на index.html -> index.html (ok)

Не называйте это:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print("call print out")
    if message.name == "myHandler" {
        print("JS -> Native Call \(message.body)")
        abc()
    } else {
        print("JS -> Native N/A")
    }
}

Я не могу получить ни одного сообщения, даже "распечатать звонок" вообще. Как я могу активировать userContentController в моем коде?

1 Ответ

0 голосов
/ 13 апреля 2019

Javascript должен быть включен через WKPreferences . Вы можете указать их в поле preferences вашей WKWebViewConfiguration. По умолчанию Javascript отключен.

Вам просто нужно установить в поле javaScriptEnabled объекта предпочтений значение true. Есть несколько полезных настроек, которые могут быть изменены объектом предпочтений. Я призываю вас взглянуть на документацию.

В частности, ваш код для инициализации WKWebView должен выглядеть следующим образом.

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

let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()
configuration.preferences.javaScriptEnabled = true

webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview

PS Возможно, вы также захотите взглянуть на этот вопрос . Я не отмечаю вашу копию как дубликат, потому что ваш вопрос спрашивает, почему не работает javascript, а не как его включить.

...