Swift - 简单的原生与网页交互
发布时间:2020-12-14 06:10:48 所属栏目:百科 来源:网络整理
导读:class WebViewViewController: UIViewController,WKScriptMessageHandler{ var webView = WKWebView() override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.white self.navigationItem.title = "webView详情" self.conf
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() //设置网页与原生交互的参数 userContentController.add(self,name: "Share")//通讯录 userContentController.add(self,name: "Camera")//相机 userContentController.add(self,name: "Test")//测试 configuration.userContentController = userContentController let preferences = WKPreferences.init() /** 阻止 JS 自动调动window.open方法打开一个新的webView; 会对JS 的window.open("../index.html");产生影响,JS 调用window.open打开新窗口的时候 WKWebView 会调用WKUIDelegate的代理方法createWebViewWithConfiguration,如果这个代理没实现,设置了javaScriptCanOpenWindowsAutomatically = YES 也没什么用 */ preferences.javaScriptCanOpenWindowsAutomatically = true preferences.minimumFontSize = 40.0 configuration.preferences = preferences self.webView = WKWebView.init(frame: self.view.frame,configuration: configuration);//设置webview // self.webView.uiDelegate = self // 设置代理 self.webView.load(URLRequest.init(url: URL.init(string: "http://192.168.0.206:9626/WKWebViewMessageHandler.html")!))//加载网页 self.view.addSubview(self.webView)//添加父视图 } // func webView(_ webView: WKWebView,runJavaScriptAlertPanelWithMessage message: String,initiatedByFrame frame: WKFrameInfo,completionHandler: @escaping () -> Void) { // // } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //WKScriptMessageHandler的协议方法:JS调用OC时会执行此方法 // userContentController webview中配置的userContentController 信息 // @param message JS执行传递的消息 func userContentController(_ userContentController: WKUserContentController,didReceive message: WKScriptMessage) { // print(message.body)//网页传给原生的内容 // print(message.frameInfo.request.url!)//请求网页的地址 // print(message.name)//网页与原生定义的同一字段根据不同的字段处理不同的事件 switch message.name { case "Test": print("测试") self.webView.evaluateJavaScript("testResult('(message.frameInfo.request.url!)')",completionHandler: { (res,err) in }) case "Share": print("选择通讯录") case "Camera": print("选择相册") default: break } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |