二、WKWebView 支持更多的HTML5的特性 高达60fps滚动刷新频率与内置手势 与Safari相容的JavaScript引擎 在性能、稳定性方面有很大提升占用内存更少 协议方法及功能都更细致...JS NSString *js = @"document.getElementsByTagName('h1')[0].innerText"; //执行JS [webView evaluateJavaScript...JSValue 是对 JavaScript 值的引用,任何 JS 中的值都可以被包装为一个 JSValue。...JSManagedValue 是对 JSValue 的包装,加入了“conditional retain”。 JSVirtualMachine 表示 JavaScript 执行的独立环境。...您使用此类有两个主要目的:支持并发 JavaScript 执行,并管理 JavaScript 和 Objective-C 或 Swift 之间桥接的对象的内存。
JS 通过这个对象或方法进行调用时,执行对应的逻辑操作,可以直接调用 Native 的方法。使用该方式时,JS 需要等到 Native 执行完对应的逻辑后才能进行回调里面的操作。...Android 中主要有两种方式实现。在 4.4 以前,通过 loadUrl 方法,执行一段 JS 代码来实现。在 4.4 以后,可以使用 evaluateJavascript 方法实现。...相关代码如下: webView.loadUrl("javascript:" + javaScriptString); webView.evaluateJavascript(javaScriptString...WKWebview 中可以通过 evaluateJavaScript:javaScriptString 来实现,支持 iOS 8.0 及以上系统。...= nil) // javaScriptString 需要调用的 JS 代码 // completionHandler 执行后的回调 // objective-c [jsContext evaluateJavaScript
对 alert、confirm、prompt 等方法做了拦截,如果通过此方式进行 Native 与 JS 交互,需要实现 WKWebView 的三个 WKUIDelegate 代理方法。...JS 通过这个对象或方法进行调用时,执行对应的逻辑操作,可以直接调用 Native 的方法。使用该方式时,JS 需要等到 Native 执行完对应的逻辑后才能进行回调里面的操作。...Android 中主要有两种方式实现。在 4.4 以前,通过 loadUrl 方法,执行一段 JS 代码来实现。在 4.4 以后,可以使用 evaluateJavascript 方法实现。...WKWebview 中可以通过 evaluateJavaScript:javaScriptString 来实现,支持 iOS 8.0 及以上系统。...= nil) // javaScriptString 需要调用的 JS 代码 // completionHandler 执行后的回调 // objective-c [jsContext evaluateJavaScript
{ progressView.isHidden = true } } } 向前、关闭X 按钮实现 (不需要的可以跳过) 当`webView`可以`goForward`时显示...方法报错 2、WKNavigationDelegate: 这个代理在加载的各个过程中都有回调,可以根据项目需求,做响应的处理: 前面三个 `func webView(_ webView: WKWebView...的使用 1)、首先我们在`WKNavigationDelegate`的`didFinish`方法回调后,就可以使用`evaluateJavaScript`跟JS交互了: // MARK: - 加载完成...exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=ReferenceError..., "莫小言") } // 无参数函数 function testA() { alert("我是JS中的弹窗消息
WKWebView 中: - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction...注入上下文 前面我们有讲过在 iOS 中内置了 JavaScriptCore 这个框架,可以实现执行 JS 以及注入 Native 对象等功能。...Android 在 Android 里面需要区分版本,在安卓4.4之前的版本支持 loadUrl,使用方式类似我们在 a 标签的 href 里面写 JS 脚本一样,都是javascript:xxx 的形式...webView.loadUrl("javascript:foo()") 在安卓4.4以上的版本一般使用 evaluateJavascript 这个 API 来调用。这里需要判断一下版本。...if (Build.VERSION.SDK_INT > 19) //see what wrapper we have { webView.evaluateJavascript("javascript
span id="jsParamFuncSpan"style="color: red; font-size: 50px;"> <script type="text/<em>javascript</em>...<em>在</em>点击前三个按钮的时候会调用方法: // 警告框 - (void)webView:(<em>WKWebView</em> *)webView runJavaScriptAlertPanelWithMessage:(NSString...注意:<em>在</em>利用UIWebView展示网页的时候我们如果要想与JS进行交互那么我们就得获取JS代码<em>中</em>的方法名,而我们<em>在</em>使用<em>WKWebView</em>的时候就不用了。...客户端<em>中</em>需增加的代码: // 注入JS对象名称AppModel,当JS通过AppModel来调用时, // 我们可以<em>在</em>WKScriptMessageHandler代理<em>中</em>接收到 [config.userContentControlleraddScriptMessageHandler...message.nameisEqualToString:@"AppModel"]) { // 打开外部链接 NSLog(@"找到了注入的JS对象..."); } } OC调用JS代码: [self.webView evaluateJavaScript
) { NSLog(@"exception==========================================================:%@", exception...); con.exception = exception; }; //设置对象别名 LSInterActive *interactive = [[LSInterActive...self.wkWebView.loading) { if (sender.tag == 123) {//电话 [self.wkWebView evaluateJavaScript...== 345) {//信息 [self.wkWebView evaluateJavaScript:@"alertSendMsg('18870707070','周末爬山真是件愉快的事情...的文件路径 根据实际情况定 ,如果是在项目中本地的就用我注释的方法,如果是在电脑桌面上就可以用没有注释的路径,根据实际情况来。
然后是对WKWebView的基本设置, self.webView.scrollView.bounces = NO; self.webView.navigationDelegate = self; 设置了取消弹性和代理...didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error //请求之前,决定是否要跳转:用户点击网页上的链接,需要打开新页面时,...限制用户选择以及长按操作 ---- 有时候,我们会遇到一个比较头疼的问题,我们不想让用户长按选择或者有弹窗,那么这时我们需要添加两行代码来禁止这一系列行为。...//WKWebview 禁止长按(超链接、图片、文本...)弹出效果 [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout...重点:JS交互 ---- WKWebView的交互方法和之前的UIWebView其实本质上没有什么太大的差别,都是通过发送方法名找到对应的方法执行对应的操作。
在iOS中 JS 和原生APP交互有许多种方法 WebViewJavascriptBridge 是我用的比较多的一个库,但是 WebViewJavascriptBridge 中在使用时最大的一个缺点就是...内部的处理类 这就造成了对原始的调用方法有一定的影响 WKWebView iOS 8 之后,无疑没有理由不使用 WKWebView 在 JS 端只需要 window.webkit.messageHandler...WKScriptMessageHandler, name:String) 并且实现协议方法即可 在 APP 端只需要 evaluateJavaScript 既可以调用 JS 方法 通过上面三种方法便可以实现大多数的...data 对block 进行持有,从而可以实现异步回调 所以在 WKScriptMessageHandler 协议方法执行的时候,根据name 取出来对应的block进行回调 import UIKit...evaluateJavaScript(javascript, completionHandler: result) } /// inject javascript code
,我对于他的理解,苹果在iOS8中推出的新框架“Webkit”,其中WKWebView就是用来替换原来的UIWebView,一句话,你用它原来UIWebView出现的各种问题都被解决了。...如下都简称WK 正常情况下,我们做Hybrid容器基本会用到WKWebView几乎全部的特性,但是也有三个其中重中之重的地方,那就是JavaScript的交互与网页应用的性能监控。...在初始化WKWebView时你还需要配置一个Conf,这个Conf中你可以添加一个属性,这个属性在JavaScript这一边你可以通过window.webkit.messageHandlers.icepyApp...= WKWebView(frame: self.view.frame, configuration: config) 最终当你需要向Native发送消息时就需要使用这个属性并调用其postMessage...你身边如果有朋友对混合领域(跨技术栈)或全栈,编程感悟感兴趣,可以转发给他们看哦,^_^先谢过啦。----
iOS12 中已经被废弃,同时WKWebView在iOS8中已经出现。...在 下方协议方法中我们将从request中获取URL信息: #pragma mark - UIWebViewDelegate // 加载所有请求数据,以及控制是否加载 - (BOOL)webView:(...()就是执行的OC代码块,如下: <!...) { NSLog(@"%@",exception); }; } 2、WKWebView OC 与 JS 交互 WKWebView 初始化: // 配置类 WKWebViewConfiguration...-- return value 通过 evaluateJavaScript: completionHandler: 回调中的值传递给OC --> return "
随着摒弃了对iOS老系统的支持,项目也开始逐步开始转向WKWebView,本想着新系统应该能填一些WKWebView的坑,结果发现还是还是坑不断,这次在iOS12又遇到一个神坑。...在iOS 10/11上面,这段代码执行都好好的,并且也没什么问题。结果现在在iOS 12beta版本里面突然不生效了,自己追加的userAgent没有添加成功。...为了验证下,我在WKWebView的delegate方法webView: didFinishNavigation:里打印customUserAgent和通过js方法获取的userAgent,结果发现两者真的是不一样的...12是不生效的,猜测原因应该是一旦实例化一个WKWebView并且调用了evaluateJavaScript: 更新其userAgent不生效。...webview.customUserAgent = agent + " customAgent" } } 总结:WKWebView虽然性能比UIWebView更好,但是在一些细节处理上,还是需要注意的
="name"> 响应iOS <script type="text/<em>javascript</em>...{ // sayHello()是JS的方法 webView.<em>evaluateJavaScript</em>("sayHello('WebView你好!')")...{ (result, err) in print(result, err) } } WKScriptMessageHandler:JS 调用 Swift 时需要用到协议中的一个方法来...view.addSubview(webView) webView.loadHTMLString(html, baseURL: nil) } // 加载完毕以后执行...{ // 调用JS方法 webView.evaluateJavaScript("sayHello('WebView你好!')")
三、Sketch Plugin 开发技术 在插件开发实现过程中,我们遇到许多交叉技术领域的问题,也因此进行了多次技术重构。...例如当正在使用一个 long-running 脚本时,即 Javascript Context 不变,并存储在内存中,那么则需要重启 Sketch 或通过 coscript.setShouldKeepAround...例如,当我们需要扩展 “创建组件“ 对话框,该对话框在 “创建组件” 事件发生时才会出现,因此在 Actions API 中搜索与 symbol 有关的事件,找到名为 Create Symbol 的 Action...Webview 可通过 WKWebView delegates 向 Plugin 发送消息,Plugin 则通过webView.evaluateJavaScript_completionHandler(...) 触发 Webview 执行 Javascript 代码。
通过执行函数evaluateJavaScript:completionHandler:,我们可以传递app端中的数据给webview,并触发html脚本函数的调用,从而响应app的行为。...在html的脚本中添加iframe对象,通过设置iframe的src属性,可成功触发WKWebview中的代理方法调用。..., 我们可以在代理方法中拦截请求,首先iframe的src的值也就是我们自定义的scheme,通过对该scheme的判断来得知我们想干什么,从而去调用app中对应的函数。...除了可以在自定义scheme中传递我们需要的参数外,我们可以在html中的脚本中把数据储存好,通过evaluateJavaScript:completionHandler:来调用脚本函数来返回需要的参数...具体如何通过WKWebview传递过来的数据来判断该执行哪个函数,有一种实现方式: 用一个字典来储存对应函数地址,这样我们可以通过传递过来的key来获得对应的函数。
JavaScriptCore.h ** 1.1 JSVirtualMachine ** JSVirtualMachine看名字直译是JS 虚拟机,也就是说JavaScript是在一个虚拟的环境中执行,...它通过加锁虚拟机,保证JSVirtualMachine是线程安全的,如果要并发执行JavaScript,那我们必须创建多个独立的JSVirtualMachine实例,在不同的实例中执行JavaScript...** 1.2 JSContext ** JSContext是为JavaScript的执行提供运行环境,所有的JavaScript的执行都必须在JSContext环境中。...JSValue包含了每一个JavaScript类型的值,通过JSValue可以将Objective-C中的类型转换为JavaScript中的类型,也可以将JavaScript中的类型转换为Objective-C...3.避免循环引用,因为block 会持有外部变量,而JSContext也会强引用它所有的变量,因此在block中调用self时,要用__weak 转一下。
在开发iOS版的直播卖货系统源码过程中,如何在html上展示商品详情,下面小编将从WKWebView入手,来介绍下实现过程。...加载完成的代理方法中更改webView的frame - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified...addObject:str]; } }]; } imageArray = [NSMutableArray arrayWithArray:arrImgURL]; return arrImgURL; } 4、在WKWebView...的代理方法中拦截图片添加的点击方法,可使用HZPhotoBrowser来展示图片 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction...:%@",navigationAction.request.URL.absoluteString); 以上,就是在开发直播卖货系统源码时,利用WKWebView展示html格式的商品详情的过程。
1.2、检测webView.title是否为空 并不是所有页面白屏的时候都会调用上面的回调函数,比如,最近遇到在一个高内存消耗的H5页面上present系统相机,拍照完毕后返回原来页面的时候出现白屏现象...3、WKWebView NSURLProtocol问题 WKWebView在独立于app进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在WKWebView上直接使用NSURLProtocol...在独立进程里执行网络请求。...另一个crash发生在WKWebView退出前调用 -[WKWebView evaluateJavaScript:completionHandler:] 执行JS代码的情况下。...WKWebView退出并被释放后导致completionHandler变成野指针,而此时javaScript Core还在执行JS代码,待javaScript Core执行完毕后会执行completionHandler
在其它进程中执行。...3、WKWebView NSURLProtocol问题 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在 WKWebView 上直接使用 NSURLProtocol...在独立进程里执行网络请求。...另一个 crash 发生在 WKWebView 退出前调用: -[WKWebView evaluateJavaScript: completionHandler:] 执行JS代码的情况下。...WKWebView 退出并被释放后导致completionHandler变成野指针,而此时 javaScript Core 还在执行JS代码,待 javaScript Core 执行完毕后会调用completionHandler
领取专属 10元无门槛券
手把手带您无忧上云