博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS和JS交互
阅读量:6972 次
发布时间:2019-06-27

本文共 2103 字,大约阅读时间需要 7 分钟。

hot3.png

https://blog.csdn.net/dolacmeng/article/details/79623708

h5代码

            
showmsg

点击结果:

拦截URL

适用于UIWebView和WKWebView,适用于带有超链接的h5标签,比如上面h5代码中的‘a’标签。

web调OC

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{    NSString *requestStr = request.URL.absoluteString;    if ([requestStr isEqualToString:@"tt://showmsg"]) {        NSLog(@"show OC msg");                //OC调JS,将OC处理结果返回给web页面        [webView stringByEvaluatingJavaScriptFromString:@"clickCallBack('点击结束')"];        return NO;    }        return YES;}

JavaScriptCore

方法1:使用block

-(void)webViewDidFinishLoad:(UIWebView *)webView{    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];     context[@"onClickOC"] = ^(NSString *string) {     NSLog(@"onClickOC--%@", string);     };}

方法2:

  • 新建类继承自NSObject(如AppJSObject)。 
  • .h文件中声明一个代理并遵循JSExport,代理内的方法和js定义的方法名一致。 
  • .m文件中实现<2>代理中对应的方法,可以在方法内处理事件或通知代理。
  • 在UIWebView加载完成的代理中把AppJSObject实例对象类注入到JS中,那么在js中调用方法就会调用到原生AppJSObject实例对象中对应的方法了。
//APPJSObject.h#import 
#import
@protocol APPJSObjectDelegate
-(void)onClickOC:(NSString *)name;@end@interface APPJSObject : NSObject
@property (nonatomic, weak) id
delegate;@end
//APPJSObject.m#import "APPJSObject.h"@implementation APPJSObject-(void)onClickOC:(NSString *)name{    [self.delegate onClickOC:name];}@end
-(void)webViewDidFinishLoad:(UIWebView *)webView{    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];        APPJSObject *obj = [[APPJSObject alloc] init];    obj.delegate = self;    context[@"app"] = obj;}

OC调JS

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//js字符串是要调用的JavaSCript函数NSString *js = [NSString stringWithFormat:@"clickCallBack('点击结束')"];[context evaluateScript:js];

转载于:https://my.oschina.net/mexiaobai1315/blog/1925251

你可能感兴趣的文章
选择设置好ext3日志模式
查看>>
程序员专用经典语录
查看>>
网络爬虫
查看>>
iOS开发基础
查看>>
5 创建型模式-----原型模式
查看>>
C++:vector中的resize()函数 VS reserve()函数
查看>>
JS对象和数组
查看>>
CodeForces - 1105C (dp)
查看>>
安装服务windows,installutil
查看>>
斐波那契数列
查看>>
如何在android程序中使用百度api接口:
查看>>
一位10年Java工作经验的架构师聊Java和工作经验
查看>>
英文词频统计预备,组合数据类型练习
查看>>
完成个人中心—导航标签
查看>>
UVA10603 Fill
查看>>
POJ NOI MATH-7652 乘积最大的拆分
查看>>
汉若塔问题算法程序
查看>>
解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题
查看>>
ReOut
查看>>
如何使用SecureCRT连接vmware下ubuntu
查看>>