H5应用程序开发
2019-08-15 16:54:54 来源:沈阳小程序开发 作者:沈阳软件开发
现在,移动Web应用程序通常需要与本机应用程序(在webview中运行)进行交互和通信,例如在微信处的jssdk,并通过window.wx对象调用一些本机应用程序功能。所以,这一次,让我们来看看h5与本机应用程序交互的原理。
H5与本机应用程序交互,主要是两个调用:
App调用h5的代码
H5呼叫应用代码
1. app调用h5的代码
因为app是主机并且可以直接访问h5,所以通过在h5中公开一些全局对象(包括方法)然后在本机应用程序中调用这些对象,这个调用更简单。
使用Javascript:
Window.sdk={double=value=> value * 2,triple=value=> value * 3,};
机器人:
Webview.evaluateJavascript('window.sdk.double(10)',new ValueCallback(){@ Override public void onReceiveValue(String s){//20}});
IOS:
NSString * func=@'window.sdk.double(10)'; NSString * str=[webview stringByEvaluatingJavaScriptFromString: func]; //20
2. h5调用应用代码
由于h5无法直接访问主机应用程序,因此此调用稍微复杂一些。
有两种方法可以称之为:
从app向h5注入一个全局js对象,然后直接在h5中访问该对象
自定义协议请求由h5启动。应用程序拦截请求后,应用程序将调用h5中的回调函数
。2.1从app注入全局js对象到h5
这种方式通信机制简单,易于理解,并且h5没有新功能,因此这是一种推荐的方法。但是,以这种方式可能存在安全风险,您可以查看您不熟悉的Android WebView漏洞。
机器人:
webview.addJavascriptInterface(new Object(){@JavascriptInterface public int double(value){return value * 2;} @JavascriptInterface public int triple(value){return value * 3;}},'appSdk');
IOS:
@interface AppSdk: NSObject {} - (int)double:(int)value; - (int)triple:(int)value; @ end @ implementation AppSdk-(int)double:(int)value {return value * 2; } - (int)triple:(int)value {return value * 3;} @ endJSContext * context=[webview valueForKeyPath: @'documentView.webView.mainFrame.javaScriptContext']; AppSdk * appSdk=[AppSdk new]; context [ @'appSdk']=appSdk;
使用Javascript:
window.appSdk.double(10); //20
2.2按h5启动自定义协议请求
这种方法有点复杂,因为它需要一个自定义协议,这对许多前端开发人员来说相对较新。因此,通常不推荐该方法,并且可以将其用作第一种方法的补充。
通常需要以下步骤:
由app定制,例如sdk: //action?params
在h5中定义回调函数,例如window.bridge={getDouble: value=> {},getTriple: value=> {}}
自定义协议请求由h5启动,例如location.href='sdk: //double?value=10'
应用程序拦截请求后,将采取适当的操作来获取返回值
h5中的回调函数由app调用,例如window.bridge.getDouble(20);
使用Javascript:
Window.bridge={getDouble: value=> {//20},getTriple: value=> {//more}}; location.href='sdk: //double?value=10';
机器人:
webview.setWebViewClient(new WebViewClient(){@Override public boolean shouldOverrideUrlLoading(WebView view,String url){//确定url是否为sdk: //停止它//然后从url sdk: //action?params Take动作和参数Uri uri=Uri.parse(url); if(uri.getScheme()。equals('sdk')){//例如action=double,params=value=10 webview.evaluateJavascript('window.bridge。 getDouble(20)'); return true;} return super.shouldOverrideUrlLoading(view,url);}});
IOS:
- (BOOL)webview:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)请求navigationType:(UIWebViewNavigationType)navigationType {//确定url是否为sdk: //首先拦截//然后从url sdk开始: //action使用params的params中的动作NSString * urlStr=request.URL.absoluteString; if([urlStr hasPrefix: @'sdk: //']){//例如action=double,params=value=10 NSString * func=@'window.bridge.getDouble(20)'; [webview stringByEvaluatingJavaScriptFromString: func];返回NO; } return YES;}
选择一家app定制的软件开发公司,最重要的是程序员的素质和综合能力,汇海科技专业从事软件开发,服务行业范围非常之广,汇聚了JAVA,NET,前端,APP应用,PHP,软件测试等多方面的开发工程师,也有平面设计,产品设计与运营,网络建设与运维等方面的专业人才,有多年的企业级软件开发的经验。
汇海科技有限公司始终坚持以创业服务创业,以创新服务创新”的宗旨,做软件开发,游戏开发和系统开发核心业务,实现前瞻性投资,为优秀创业者做一站式扶持,并建立“大服务、大扶持、大未来”的目标。汇海科技坚持以客户需求为中心,打造企业品牌助力企业成长!那么最后说一句,如果您有软件开发的需求,请马上关注联系我们吧。
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。
上一篇:
区块链防伪追溯系统
下一篇:很抱歉没有了