我只是使用 WKWebView with swift 4.0 (iOS 12.1( 构建我的应用程序
我需要从在线 html 运行我的 JavaScript,但是,如果我将网址从索引移动到另一个页面,我的打印消息根本不起作用。
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)
当我移动到webView中的另一个html页面时,我错过了userContentController。索引页可以调用此页面,但另一个页面不调用任何函数。
index.html(ok( -> 链接到 a.html -> a.html (不确定( -> 链接到索引.html-> 索引.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")
}
}
我甚至根本无法收到任何消息,甚至"呼叫打印出来"。如何在代码中激活用户内容控制器?
preferences
字段中指定这些内容。默认情况下,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 不起作用,而不是如何启用它。
编辑:JavaScript现在默认启用。这个答案已经不准确了。
iOS 14+ 的正确用法
let contentController = WKUserContentController()
contentController.add(self, name: "myHandler")
let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()
// Here's the new magic for iOS 14:
let webPageDefaultPrefs = WKWebpagePreferences()
webPageDefaultPrefs.allowsContentJavaScript = true
config.defaultWebpagePreferences = webPageDefaultPrefs
webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview