如下都简称WK 正常情况下,我们做Hybrid容器基本会用到WKWebView几乎全部的特性,但是也有三个其中重中之重的地方,那就是JavaScript的交互与网页应用的性能监控。...到Native类型的转换,比如JavaScript的对象可以转为Dictionary对应的其他类型也是如此。...发送消息就更不用说了,直接调用“evaluateJavaScript”方法注入就好,唯一的优势是在于,发送的消息可以先转成JSON,然后字符串化当参数传入到一个函数里,而你的函数真实接收到的是一个对象,...{ // 当内容开始返回时调用 } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)..., withError error: Error) { // 页面加载错误 print(error) } 每一个delegate实现中你都应该去做一条日志的记录或者是页面加载完成时间
{ print("即将完成: didCommit") } // MARK: - 加载错误 func webView(_ webView: WKWebView, didFailProvisionalNavigation...: \(message.body)") default: break } } } 这边贴一下JS那边的实现 javascript"> /...其实上面的代理实现的已经差不多了,下面补充并说明一下: 1、evaluateJavaScript的使用 1)、首先我们在`WKNavigationDelegate`的`didFinish`方法回调后,...就可以使用`evaluateJavaScript`跟JS交互了: // MARK: - 加载完成 func webView(_ webView: WKWebView, didFinish navigation...,并打印返回数据 @objc func callJSFunc() { webView.evaluateJavaScript("swiftTestObject('xjf', 26)", completionHandler
一般会通过修改浏览器的部分 Window 对象的方法来完成操作。...在 4.4 以后,可以使用 evaluateJavascript 方法实现。loadUrl 方法使用起来方便简洁,但是效率低无法获得返回结果且调用的时候会刷新 WebView。...evaluateJavascript 方法效率高获取返回值方便,调用时候不刷新WebView,但是只支持 Android 4.4+。...相关代码如下: webView.loadUrl("javascript:" + javaScriptString); webView.evaluateJavascript(javaScriptString...API 版本”的报错进行处理 // 其余种类的错误信息交由具体的业务去处理 fn && fn((err) => { vm.
一、前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!...二、WKWebView 支持更多的HTML5的特性 高达60fps滚动刷新频率与内置手势 与Safari相容的JavaScript引擎 在性能、稳定性方面有很大提升占用内存更少 协议方法及功能都更细致...,结果为一个元素;如果没找到匹配的元素,则返回null document.querySelectorAll()//css选择符模式,返回与该模式匹配的所有元素,结果为一个类数组 六、JavaScriptCore...您使用此类有两个主要目的:支持并发 JavaScript 执行,并管理 JavaScript 和 Objective-C 或 Swift 之间桥接的对象的内存。...每个 JavaScript 上下文(JSContext 对象)都属于一个 JSVirtualMachine。
configuration:(WKWebViewConfiguration *)configuration 这个方法就够用了,第一个参数不多说,按照通常的使用就可以,第二个参数是对webView的配置对象...:(null_unspecified WKNavigation *)navigation; // 当内容开始返回时调用 - (void)webView:(WKWebView *)webView didCommitNavigation...//WKWebview 禁止长按(超链接、图片、文本...)弹出效果 [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout...重点:JS交互 ---- WKWebView的交互方法和之前的UIWebView其实本质上没有什么太大的差别,都是通过发送方法名找到对应的方法执行对应的操作。...messageDic = message.body; [self requestApplyGoods:messageDic[@"trade_sn"]]; } //弹出错误信息
WKWebView的使用 前言 最近项目中的UIWebView被替换为了WKWebView,因此来总结一下WKWebView的使用。...示例Demo:WKWebView的使用 本文将从以下几方面介绍WKWebView: 1、WKWebView涉及的一些类 2、WKWebView涉及的代理方法 3、网页内容加载进度条的实现 4、JS...和OC的交互 5、本地HTML文件的实现 一、WKWebView涉及的一些类 WKWebView:网页的渲染与展示 注意: #import //初始化..., 类似导航控制的左滑返回 _webView.allowsBackForwardNavigationGestures = YES; //可返回的页面列表, 存储已打开过的网页...]; } //提交发生错误时调用 - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation
弹窗拦截弹窗包括:alert、confirm、prompt, 和url拦截类似都在回调方法中处理以WKWebView的alert为例:- (void)webView:(WKWebView *)webView...*context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; // 承载方法的对象...WKWebViewevaluateJavaScript:completionHandler: [self.wkWebView evaluateJavaScript:@"loginResult('success...() (Android4.4之后)1. loadUrl// 调用H5中的loginResult函数webView.loadUrl("javascript:loginResult()"); 2. ...evaluateJavascriptwebView.evaluateJavascript("javascript:loginResult()", new ValueCallback()
JavaScript 可以直接调用这个 Java 对象的公共方法。...从原生 APP 调用 WebGL (JavaScript): iOS (WKWebView): [webView evaluateJavaScript:javaScriptString completionHandler...这段 JavaScript 会在 WebView 中运行,从而调用 WebGL 内容中的函数或改变其状态。可以获取 JavaScript 执行的返回值。...异步执行 JavaScript,并能获取返回值。...webView.loadUrl("javascript:myFunction('param')") (老旧方式): 简单的同步执行 JavaScript,无法获取返回值。
="name"> 响应iOS javascript...{ // sayHello()是JS的方法 webView.evaluateJavaScript("sayHello('WebView你好!')")...{ // 调用JS方法 webView.evaluateJavaScript("sayHello('WebView你好!')")...{ (result, err) in // result是JS返回的值 print(result, err) } }...WKUserScript userContentController.addUserScript(userScript) // addUserScript(_:) 接收一个WKUserScript对象
WebViewJavascriptBridge 使用了一个中间代理 setWebViewDelegate 必须将 UIWebView、WKWebView 的代理设置为 WebViewJavascriptBridge...内部的处理类 这就造成了对原始的调用方法有一定的影响 WKWebView iOS 8 之后,无疑没有理由不使用 WKWebView 在 JS 端只需要 window.webkit.messageHandler...便可以添加一个 WKUserScript 对象,从而可以插入需要额外加入的 JS 代码 WKScriptMessageHandler 至于 messageHandler 的具体的使用用法,这里便不做详细的说明...a javascript /// /// - Parameters: /// - javascript: javascript code /// - callBack...evaluateJavaScript(javascript, completionHandler: result) } /// inject javascript code
,JS 调用是同步的,可以立马拿到返回值。...iOS WKWebView WKWebView 里面通过 addScriptMessageHandler 来注入对象到 JS 上下文,可以在 WebView 销毁的时候调用 removeScriptMessageHandler...这种方式无法直接获取返回值。 webView.loadUrl("javascript:foo()") 在安卓4.4以上的版本一般使用 evaluateJavascript 这个 API 来调用。...if (Build.VERSION.SDK_INT > 19) //see what wrapper we have { webView.evaluateJavascript("javascript...results = [self.webView stringByEvaluatingJavaScriptFromString:"foo()"]; WKWebView WKWebView 可以使用 evaluateJavaScript
——html中script中定义的对象。...通过执行函数evaluateJavaScript:completionHandler:,我们可以传递app端中的数据给webview,并触发html脚本函数的调用,从而响应app的行为。...2、webview如何调用app端的函数呢? 在html的脚本中添加iframe对象,通过设置iframe的src属性,可成功触发WKWebview中的代理方法调用。...除了可以在自定义scheme中传递我们需要的参数外,我们可以在html中的脚本中把数据储存好,通过evaluateJavaScript:completionHandler:来调用脚本函数来返回需要的参数...该参数会在completionHandler的回调函数中以字符串返回,通常是用NSJSONSerialization来解析。
在开发iOS版的直播卖货系统源码过程中,如何在html上展示商品详情,下面小编将从WKWebView入手,来介绍下实现过程。... _webView.scrollView.panGestureRecognizer.enabled = NO; } return _webView; } 2、获取服务端返回的...,如果服务端返回的就是手机端展示的样式,这就可以不用更改 直接用就可以了 NSString * htmlStyle = @" *{min-width:...加载完成的代理方法中更改webView的frame - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified..., _goodListView.bottom, _window_width, [result doubleValue]);//将WKWebView的高度设置为内容高度 //更改背景scrollview的滑动范围
WKUIDelegate:用于交互处理JavaScript中的一些弹出框。 WKBackForwardList:堆栈管理的网页列表。 WKBackForwardListItem:每个网页节点对象。...类是JavaScript传递的对象实例,其中属性如下: //传递的消息主体 @property (nonatomic, readonly, copy) id body; //传递消息的WebView @...property (nullable, nonatomic, readonly, weak) WKWebView *webView; //传递消息的WebView当前页面对象 @property (nonatomic...- (nullable WKNavigation *)reloadFromOrigin; //停止加载 - (void)stopLoading; //执行JavaScript代码 - (void)evaluateJavaScript...JavaScript代码的注入也是通过WKUserContentController来完成的,使用addUserScript:方法来注入JavaScript,其中需要通过WKUserScript类来生成要注入的对象
同样的用WKWebView也可以拦截URL,做JS 与OC交互。关于WKWebView与UIWebView的对比,大家请自动百度或者google。...除了代理方法和WKWebView的使用不太一样,关于WKWebView更详尽的讲解和用法,还是自行搜索学习,本文重点还是讲解如何实现JS 与OC 互相调用。...这时候就是OC 调用JS 方法的场景。 WKWebView 提供了一个新的方法evaluateJavaScript:completionHandler:,实现OC 调用JS 等场景。...:completionHandler:没有返回值,JS 执行成功还是失败会在completionHandler 中返回。...4.WKWebView中使用弹窗 在上面提到,如果在WKWebView中使用alert、confirm 等弹窗,就得实现WKWebView的WKUIDelegate中相应的代理方法。
WebViewJavaScriptBridge 使用一个不可见的 iFrame 来触发消息传递, 应该是为了兼容 UIWebView 和 WKWebView。...JS 调用原生(以 WKWebView 为例) callHandler => _doSend 设置 iFrame 的 src 属性 WKWebView 代理方法- (void)webView:(WKWebView..._fetchQueue(); 返回 JS 发送的消息对象数组 拿到消息对象数组后,执行 - (void)flushMessageQueue:(NSString *)messageQueueString...NSNull null]; } // 客户端处理完消息执行 callback 后,将数据跟 callbackId 组装成一个对象...*/ - (void)injectJavascriptFile { NSString *js = WebViewJavascriptBridge_js(); [self _evaluateJavascript
然后根据这些信息,进行相应的业务逻辑处理,最后通过主机将处理后的数据返回(返回的数据一般为 JSON 字符串)。 App 接收到主机返回的数据,进行解析处理,最后展示到界面上。...响应状态码 状态码 描述 含义 200 Ok 请求成功 400 Bad Request 客户端请求的语法出现错误,服务端无法解析 404 Not Found 服务端无法根据客户端的请求找到对应的资源 500...请求响应过程 JSON JavaScript Object Notation。 一种轻量级的数据格式,一般用于数据交互。 服务端返回给 App 客户端的数据,一般都是 JSON 格式。...{ // 调用JavaScript方法 webView.evaluateJavaScript("sayHello('WebView你好!')")...{ (result, err) in // result是JavaScript返回的值 print(result, err) } } WKScriptMessageHandler
使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,还有一种简单的方式。那就是利用WKWebView的新特性MessageHandler来实现JS调用原生方法。...- addScriptMessageHandler:name:有两个参数,第一个参数是userContentController的代理对象,第二个参数是JS里发送postMessage的对象。...1.创建WKWebViewConfiguration对象,配置各个API对应的MessageHandler。...// 将分享结果返回给js NSString *jsStr = [NSString stringWithFormat:@"shareResult('%@','%@','%@'...实现OC 调用JS方法跟上一篇是一样的,还是利用 - evaluateJavaScript:completionHandler:。