addUserScript не работает после инициализации WKWebView - PullRequest
0 голосов
/ 30 апреля 2019

Когда я изменяю WKUserContentController после создания WKWebView экземпляра. Вот мой код.

let configuration = WKWebViewConfiguration()
let userController = WKUserContentController()
userController.addUserScript(WKUserScript(source: "alert('it works')", injectionTime: .atDocumentEnd, forMainFrameOnly: true))

configuration.userContentController = userController // before instantiate WKWebView

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

view = webView

выше код работает нормально, но ниже не

let configuration = WKWebViewConfiguration()
let userController = WKUserContentController()
userController.addUserScript(WKUserScript(source: "alert('it doesn't work')", injectionTime: .atDocumentEnd, forMainFrameOnly: true))

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

webView.configuration.userContentController = userController // 
// neither configuration.userContentController = userController

view = webView

Почему это происходит?
На самом деле, все нормально, когда я пишу код, независимо от того, что это ошибка или что-то в этом роде. Тем не менее, это беспокоит меня, когда я использую это с раскадровкой. Я не могу изменить WKUserContentController после создания раскадровки WKWebView

1 Ответ

1 голос
/ 30 апреля 2019

Не заменяйте пользовательский контент-контроллер. Просто используйте тот, который уже есть в веб-представлении:

let script = // whatever
let config = webView.configuration
config.userContentController.addUserScript(script)

Это работает, даже если просмотр веб-страниц происходил из раскадровки.

...