js与oc交互以及cookie设置 UIWebView与WKWebview兼容
来源:互联网 发布:mysql约束 编辑:程序博客网 时间:2024/05/18 09:07
本文是我的学习总结 希望对后来学习这一方面的同学有所帮助
UIWebview与js传值方式有两种
第一种是为js注入对象的方式
//这种方法是给js注入SMJSExportFunction对象实现
- (void)webViewDidFinishLoad:(SMWebView *)webView{
self.context = [webView.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
SMJSExportFunction *exportFunction =[SMJSExportFunctionnew];
exportFunction.delegate=self;
self.context[@"wobridge"]=exportFunction;//wobridge为js对象
}
对应的js中应有wobridge对象接受,注入成功后即可用wobridge调用oc本地方法,本地创建SMJSExportFunction实现JSExport协议
第二种方式 以 JSExport协议关联 native 的方法
- (void)webViewDidFinishLoad:(SMWebView *)webView{
self.context = [webView.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.context.exceptionHandler =
^(JSContext *context, JSValue *exceptionValue)
{
context.exception = exceptionValue;
NSLog(@"%@", exceptionValue);
};
self.context[@"native"] = self;//关联native
//js中调用sumit方法将在此处响应
self.context[@"submit"] =
^(id dic)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"msg from js" message:@"ll" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
});
};
}WKWebView传值方式首先需要向js注入TestModel对象,这样js可以通过
window.webkit.messageHandlers.TestModel.postMessage()通知传值
下为添加对象方法
SMScriptMessageDelegate *sDelegate=[[SMScriptMessageDelegatealloc] initWithDelegate:(id)self];
[self.webViewaddScriptMessageHandler:sDelegatename:@"TestModel"];
js给oc传值再此实现方法调用
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage*)message
关于cache WK不支持NSURLCache,所以无法截取网络连接 替换cache内容
UIWebView截取cache首先需要设置
[NSURLCachesetSharedURLCache:cache]
关于cookie
UIWebView支持NSHTTPCookieStorage可以通过
NSArray *cookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage] cookiesForURL:[NSURLURLWithString:@"www.baidu.com"]];//此处链接应为你的项目ip
for (NSHTTPCookie *cookiein cookies){
NSArray *headeringCookie = [NSHTTPCookiecookiesWithResponseHeaderFields:[NSDictionarydictionaryWithObject:[[NSStringalloc] initWithFormat:@"%@=%@",[cookiename],[cookie value]]forKey:@"Set-Cookie"]forURL:[NSURLURLWithString:@"www.baidu.com"]];
[[NSHTTPCookieStoragesharedHTTPCookieStorage] setCookies:headeringCookieforURL:[NSURLURLWithString:@"www.baidu.com"]mainDocumentURL:nil];
}
来设置cookie需要共用WKWebView如果需要设置cookie 需要通过注入js方法设置实现
[_webViewaddUserScriptWithJS:[NSStringstringWithFormat:@"document.cookie=\'%@\'",[NSStringstringWithFormat:@"JSESSIONID=272173718"]]injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];
各个wk之间共用cookie需要共用WKProcessPool这个文件管理池来实现
if ([SMWebviewManagershareManager].processPool) {
configuration.processPool=[SMWebviewManagershareManager].processPool;
}else{
WKProcessPool *processPool=[[WKProcessPoolalloc] init];
[SMWebviewManagershareManager].processPool=processPool;
}
上面是我近段时间学习js与oc交互的总结,一些简单知识,或许对大家有所帮助,详细代码
https://github.com/lixuepeng996/SMWebView
- js与oc交互以及cookie设置 UIWebView与WKWebview兼容
- js与oc交互以及cookie设置 UIWebView与WKWebview兼容
- OC 与 JS 交互 (UIWebView & WKWebView)
- oc与js交互-----WKWebView
- UIWebView、WKWebView与js的交互
- WKWebView OC与js的交互
- OC与JS交互之WKWebView
- OC与JS交互之WKWebView
- OC与JS交互之WKWebView
- OC与JS交互之WKWebView
- iOS中UIWebView与WKWebView、JavaScript与OC交互、Cookie管理看我就够(上)
- iOS中UIWebView与WKWebView、JavaScript与OC交互、Cookie管理看我就够(中)
- iOS中UIWebView与WKWebView、JavaScript与OC交互、Cookie管理看我就够(下)
- OC与JS交互之UIWebView
- OC与JS交互之UIWebView
- WKWebView与js交互
- WKWebView与JS交互
- WKWebView与JS交互
- Spark Streaming 运行时Java VM内存不足
- 使用fastText进行文本分类
- 文章阅读(入门ML、DL;BAT经验)
- Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump
- Oracle_spatial的几何处理函数
- js与oc交互以及cookie设置 UIWebView与WKWebview兼容
- 用Oracle的函数,判断点是否在多边形内
- Java精选笔记_网络编程
- 进程介绍及查看工具
- mnist数据集格式转换---机器学习(0)
- 「ML」chapter3:线性模型
- tomcat解压缩版环境配置
- POJ-3660-Cow Contest FLOYD传递闭包
- 数据压缩 实验四 DPCM压缩系统的实现和分析