class WebViewViewController: UIViewController ,WKScriptMessageHandler{
var webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
self.navigationItem.title = "webView詳情"
self.configUI()
}
//加載UI
func configUI(){
let configuration = WKWebViewConfiguration.init()
let userContentController = WKUserContentController.init()
//設(shè)置網(wǎng)頁與原生交互的參數(shù)
userContentController.add(self, name: "Share")//通訊錄
userContentController.add(self, name: "Camera")//相機(jī)
userContentController.add(self, name: "Test")//測(cè)試
configuration.userContentController = userContentController
let preferences = WKPreferences.init()
/**
阻止 JS 自動(dòng)調(diào)動(dòng)window.open方法打開一個(gè)新的webView;
會(huì)對(duì)JS 的window.open("../index.html");產(chǎn)生影響,JS 調(diào)用window.open打開新窗口的時(shí)候 WKWebView 會(huì)調(diào)用WKUIDelegate的代理方法createWebViewWithConfiguration,如果這個(gè)代理沒實(shí)現(xiàn),設(shè)置了javaScriptCanOpenWindowsAutomatically = YES 也沒什么用
*/
preferences.javaScriptCanOpenWindowsAutomatically = true
preferences.minimumFontSize = 40.0
configuration.preferences = preferences
self.webView = WKWebView.init(frame: self.view.frame, configuration: configuration);//設(shè)置webview
// self.webView.uiDelegate = self // 設(shè)置代理
self.webView.load(URLRequest.init(url: URL.init(string: "http://192.168.0.206:9626/WKWebViewMessageHandler.html")!))//加載網(wǎng)頁
self.view.addSubview(self.webView)//添加父視圖
}
// func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
//
// }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
//WKScriptMessageHandler的協(xié)議方法:JS調(diào)用OC時(shí)會(huì)執(zhí)行此方法
// userContentController webview中配置的userContentController 信息
// @param message JS執(zhí)行傳遞的消息
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
// print(message.body)//網(wǎng)頁傳給原生的內(nèi)容
// print(message.frameInfo.request.url!)//請(qǐng)求網(wǎng)頁的地址
// print(message.name)//網(wǎng)頁與原生定義的同一字段根據(jù)不同的字段處理不同的事件
switch message.name {
case "Test":
print("測(cè)試")
self.webView.evaluateJavaScript("testResult('(message.frameInfo.request.url!)')", completionHandler: { (res, err) in
})
case "Share":
print("選擇通訊錄")
case "Camera":
print("選擇相冊(cè)")
default:
break
}
}
}