在平常的ios项目开发中,咱们常常会在原生应用中嵌入web页面,一般咱们只是进行一个展现,没有其它的一些功能。可是也有一些项目中须要web页面中的html和native进行交互。可是ios sdk 并无相应的方法来让咱们作到js代码来和原生进行交互。可是webview在加载前会调用其一个delegate方法,经过监听
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
代理方法,咱们能够经过url的变化来判断用户目前的一些点击行为。以下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if ([[request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]hasSuffix:@'login_app']) {
//用户点击了登陆按钮
[self doLogin];
return YES;
}else if([[request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]hasSuffix:@'register_app']){
//用户点击了注册按钮
[self doRegister];
return YES;
}
}
咱们能够看到,针对不一样的url,咱们能够判断对应的用户行为,可是前提是用户的不一样行为给webView带来不一样的响应url,这样咱们才能够判断用户的行为。html
同时在咱们的项目开发过程当中,其实咱们有的时候也但愿去操控webview中显示的页面。针对这一点,ios sdk 提供了相应的方法,
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
好比咱们想获取页面中的id为icon_app的某个属性。咱们能够以下操做前端
NSString *downLoadPath = [webView stringByEvaluatingJavaScriptFromString:@'document.getElementById('icon_app').getAttribute('data_url')'];
在编写这种代码的前提是咱们对于js比较熟悉,能给书写一些简单的js代码,固然咱们也能够向相应同事提供帮助。另外其实咱们也能够调用webView中js方法,前提是咱们的前端同事把对应的js方法写好,而后在咱们在native中采用stringByEvaluatingJavaScriptFromString 来调用对应的方法。以下:ios
[myWebView stringByEvaluatingJavaScriptFromString:@'showPlay()'];web