GWebView是集成了两代Web引擎的最好用的网页JS交互框架之一
GSWebView文档:https://github.com/xorshine/GSWebView
GSWebView下载地址:https://github.com/xorshine/GSWebView.git
如UIWebView一样使用GSWebView,用熟悉的API开发
@property (nonatomic, readonly, strong) UIScrollView *scrollView; @property (nonatomic, readonly) BOOL canGoBack; @property (nonatomic, readonly) BOOL canGoForward; - (void)reload; - (void)stopLoading; - (void)goBack; - (void)goForward; - (BOOL)gswebView:(GSWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(GSWebViewNavigationType)navigationType; - (void)gswebViewDidStartLoad:(GSWebView *)webView; - (void)gswebViewDidFinishLoad:(GSWebView *)webView; - (void)gswebView:(GSWebView *)webView didFailLoadWithError:(NSError *)error;
JS交互重点
GSWebView定义了两套协议GSWebViewDelegate和GSWebViewJavaScript,GSWebViewDelegate定义了加载状态,GSWebViewJavaScript则只定义了JS交互。#prama mark - GSWebViewJavaScript /** 交互协议 */ @protocol GSWebViewJavaScript <NSObject> @optional /** 调用OC方法 - (NSArray<NSString *>*)gswebViewRegisterObjCMethodNameForJavaScriptInteraction { return @[@"getCurrentUserId"]; } //当JS调用一个'- (void)getCurrentUserName:(NSString *)name'的OC方法时,参数name由JS传来, //那么在实现该OC方法时,只需要正确知道参数类型或基本结构,你也可以写为id类型做普适,在方法内部做转换。 - (void)getCurrentUserId:(NSString *)Id { NSLong@(@"JS调用到OC%@",Id); } */ - (NSArray<NSString *>*)gswebViewRegisterObjCMethodNameForJavaScriptInteraction;
服务端JavaScript源码必须的改动
var version = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); version = parseInt(ver[1], 10); if(version >= 7.0 && version < 8.0){ getConsultationInfo(id); }else if(version>=8.0){ window.webkit.messageHandlers.getConsultationInfo.postMessage(id) }
提醒与注意事项
如果之前使用了UIWebView,如今使用GSWebView,在服务端对JS源码做出改动后,必须要考虑客户端老版本的兼容情况。当改动服务端的JS代码,势必导致老版本中的UIWebView交互失效。在下有个建议:NSString * shouldUseLatestWebView; if (IS_IOS_8) { shouldUseLatestWebView = [NSString stringWithFormat:@"shouldUseLatestWebView('%@')", @"1"]; }else{ shouldUseLatestWebView = [NSString stringWithFormat:@"shouldUseLatestWebView('%@')", @"0"]; } [self.webview excuteJavaScript:jsGetCurrentUserId completionHandler:^(id _Nonnull params, NSError * _Nonnull error) { if (error) { NSLog(@"注入JS方法shouldUseLatestWebView出错:%@",[error localizedDescription]); } }];
//一个全局的变量 var isBool = ""; function shouldUseLatestWebView(isBool){ isBool = isBool; } if(isBool == "0" || isBool == ""){ getConsultationInfo(id); }else if(isBool == "1"){ window.webkit.messageHandlers.getConsultationInfo.postMessage(id); }
问题内容: 我目前使用Apache Axis。但是我正在Intellij IDEA中创建一个新项目,并且可以选择添加以下内容之一: 阿帕奇轴心 Glassfish / JAX-WS 2.x RI / Metro 1.x / JWSDP 2.0 宁静的Web服务 我之所以选择Axis,是因为它是我惯用的一种,但是我仍然想知道它是否是更简单的选择。 问题答案: 我会选择JAX-WS 2.x RI /
本文向大家介绍10款最好的Web开发的 Python 框架,包括了10款最好的Web开发的 Python 框架的使用技巧和注意事项,需要的朋友参考一下 Python 是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还自带服务器。其它方面,Python拥有足够多
先进行通用配置, 【第十章】集成其它Web框架 之 10.1 概述 10.4 集成JSF 10.4.1 概述 JSF(JavaServer Faces)框架是Java EE标准之一,是一个基于组件及事件驱动的Web框架,JSF只是一个标准(规范),目前有很多厂家实现,如Oracle的默认标准实现Mojarra、Apache的MyFaces、Jboss的RichFaces 等。 本示例将使用Orac
杭州,自研引擎,技术中台,非项目内引擎组。 技术一面(90min):10月9日 图形渲染基础、Cpp八股、场景题考察算法。一面基本全是基础,图形相关的会深挖,如:你刚刚提到xxx,能说说xxx么?然后大概问道你不太清楚为止。面试官感觉还是比较友好的。 技术二面(60min):10月12日 没开摄像头。主要是项目方面,三个相关项目挨个介绍,中途有稍微深入的询问。总体感觉深度不大。问了我对引擎开发更感
先进行通用配置, 【第十章】集成其它Web框架 之 10.1 概述 10.3 集成Struts2.x 10.3.1 概述 Struts2前身是WebWork,核心并没有改变,其实就是把WebWork改名为struts2,与Struts1一点关系没有。 Struts2中通过ObjectFactory接口实现创建及获取Action实例,类似于Spring的IoC容器,所以Action实例可以由Obje
先进行通用配置, 【第十章】集成其它Web框架 之 10.1 概述 10.2 集成Struts1.x 10.2.1 概述 Struts1.x是最早实现MVC(模型-视图-控制器)模式的Web框架之一,其使用非常广泛,虽然目前已经有Struts2.x等其他Web框架,但仍有很多公司使用Struts1.x框架。 集成Struts1.x也非常简单,除了通用配置外,有两种方式可以将Struts1.x集成到
本文向大家介绍为什么Ember.js是最好的javascript框架?,包括了为什么Ember.js是最好的javascript框架?的使用技巧和注意事项,需要的朋友参考一下 ember成为javascript顶级Web开发框架之一的原因很多。其中一些原因是- 由于内置了模板解决方案,因此无需编写太多代码。 灰烬的固执己见的体系结构可避免在不重要的决策上浪费时间。 友好的API,使应用程序开发高效
问题内容: 您是否知道可以在Go中创建交互式网页?例如,是否具有一个或多个按钮,或者一个组合框可以根据选择过滤正在刷新的数据的页面?我试图寻找它,但是没有找到任何相关的东西。 提前致谢。 问题答案: 浏览器无法直接运行Go代码。客户端的交互式网页使用不同的技术,例如HTML,Javascript和CSS。 但是,在客户端使用上述语言并在服务器端使用Go执行所有操作是可行的技术堆栈。 话虽这么说,仍