美文网首页
ios跟网页的交互

ios跟网页的交互

作者: 七码_Z | 来源:发表于2018-11-01 17:17 被阅读0次

最近项目里面用了一些h5的页面,然后避免不了,要跟网页交互。我用了UIwebView,也用了WKWebView。现在分别说下我自己的两种用法。

1、UIWebView:之前跟网页交互,基本就是拦截URL,跟前端的同事约好,拦截具有某些字符串的URL,可将携带的参数拼接在URL里面。主要就是实现 webview的这个代理方法。

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        guard let url = request.url, let q = URLComponents(url: url, resolvingAgainstBaseURL: true)?.queryItems else { return true }
        if url.absoluteString.contain("homeworkStu/saveStuHomeworkAnswer") {
            print("点击返回的链接是 == ",url)
            var p = [String : Any]()
            q.forEach({
                if let v = $0.value {
                    p[$0.name] = v
                }
            })
            self.saveAnwser(params: p)
            return false
        }
        return true
    }

我这里面实现的是,点击网页上面的某个按钮,然后我调用 saveAnwser()这个方法。我跟前端约定的就是,URL里面包含"homeworkStu/saveStuHomeworkAnswer"这个字符,然后将传给我的参数都拼接到URL里面,我自己再来解析出来。这种可能传参内容少,还可以。但是如果前端要传一个解析好的网络请求结果给我们,估计他们不愿意这种吧。

2、WKWebView:这种一样,也是要跟前端同事约定好,遵循 WKScriptMessageHandler 代理。

let config = WKWebViewConfiguration.init()
        config.userContentController.add(self, name: "collectGzhu")
        webView = WKWebView(frame: CGRect(x: 0, y: 0, width: UIScreen.w, height: app.isIphoneX ? (UIScreen.h - 88) : (UIScreen.h - 64)), configuration: config)
        webView.navigationDelegate = self
        webView.uiDelegate = self
        webView.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.new, context: nil)
        self.view.addSubview(webView)

这里我跟前端同事约定的方法名就是 collectGzhu。然后就是实现这个代理方法。

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "collectGzhu" {

            print(message.body)
        }
    }

这种方法好像更简便一些,前端直接把要穿给我们的内容,放在body里面。
//js端代码实现实例(此处为js端实现代码给大家粘出来示范的!!!):

//window.webkit.messageHandlers.collectGzhu.postMessage({body: 'name=1212'});

还有拦截网页alert。就是实现这些代码方法。

func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        
        self.alert(title: message, msg: message)
        completionHandler()
    }
    
    func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
        
        self.alert(title: message, msg: message)
        completionHandler(true)
    }
    
    func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {
        
        self.alert(title: prompt, msg: prompt)
        completionHandler(nil)
    }
这里面的 completionHandler 回调必须写,我之前没写 completionHandler,一直崩溃,后来在网上找到的解决办法,就是要把completionHandler写上去。

相关文章

  • ios跟网页的交互

    最近项目里面用了一些h5的页面,然后避免不了,要跟网页交互。我用了UIwebView,也用了WKWebView。现...

  • iOS原生App与H5页面交互笔记

    iOS原生App与H5页面交互笔记WKWebview 交互实现Http与iOS以及网页交互

  • localhost配置SSL证书

    背景 iOS移动端使用 CocoaAsyncSocket 通过本地HTTP Server与网页端交互 网页端支持 ...

  • iOS UIWebView 与 WKWebView

    前言:开发场景中,我们总是会遇到需要跟web端人员配合实现 原生加载网页并处理交互的情况。在 iOS 7.0 之前...

  • iOS web交互

    iOS极简模式实现Webview网页图片原生预览 IOS中 使用JavaScriptCore 实现OC与JS的交互...

  • 富文本ZSSRichTextEditor之趟坑集锦

    富文本ZSSRichTextEditor是iOS原生与网页交互的集大成者,各种交互。自然问题也是多多,这篇文文章陆...

  • iOS与JS交互总结

    iOS与JS交互总结 近几年来移动开发使用网页嵌入形式的越来越多,这就不可避免的出现原生控件和网页页面的JS交互,...

  • iOS JS与OC交互

    博文参考: 链接1: iOS与网页JS交互,3中方法实现链接2:IOS中 使用JavaScriptCore 实现O...

  • iOS-js与iOS的交互(基于WKWebViewJavascr

    后天就要去北京出差了,据说那边的项目主要是与网页交互,所以就简单的研究了一下js与iOS的交互。 其交互方式有很...

  • OC和JS交互实践篇

    前言 在iOS开发过程中,一般会有遇到需要和UIWebView交互的需求,即native端和网页端的数据交互,因为...

网友评论

      本文标题:ios跟网页的交互

      本文链接:https://www.haomeiwen.com/subject/hgvxxqtx.html