Ответ 1
К сожалению, WKWebView должен быть в иерархии представления, чтобы использовать его. Вы, должно быть, добавили его как вспомогательный вид контроллера экранного представления.
Вы можете добавить это за кадром, чтобы оно не было видно. Скрытый атрибут тоже мог бы сработать. В любом случае вы должны вызвать addSubview с ним, чтобы он работал.
Здесь есть и другие вопросы и ответы , которые подтверждают это.
Итак, я немного исследовал и нашел это
WKWebViewConfiguration* webViewConfig = // set up config
// provide empty frame rect
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero
configuration:webViewConfig];
// add to keyWindow to ensure it is 'active'
[UIApplication.sharedApplication.keyWindow addSubview:webView];
Этот подход, по крайней мере, обеспечивает работу JavaScript, когда приложение активно, и не влияет на пользовательский интерфейс. Если вам нужно отобразить его позже, вы можете удалить webView из keyWindow после рендеринга и сбросить фрейм.
Надеюсь, это поможет!
EDIT
Javascript по умолчанию отключен. Чтобы запустить Javascript, необходимо включить его через WKPreferences. Вам необходимо установить в поле javascriptEnabled
объекта предпочтений значение true.
В частности, ваш код для инициализации WKWebView должен выглядеть следующим образом.
let contentController = WKUserContentController()
contentController.add(self, name: "handler")
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
Также вы можете проверить этот пост, чтобы увидеть другой подход.