ObjCWebViewJavaScriptBridge
跨iframe WebView JavaScript Bridge,面向 iOS(8.0+) 和 macOS(10.10+),支持 WKWebView、UIWebView、WebView。
安装
- 本地应用
-
Cocoapods
将以下内容添加到项目的 Podfile 中
pod 'ObjCWebViewJavaScriptBridge'
-
Carthage
将以下内容添加到项目的 Cartfile 中
github "ouyanghuacom/ObjCWebViewJavaScriptBridge"
-
Web
将 JavaScript 包含在 Web 项目中。
-
本地使用
-
创建服务器
服务器会自动与 WebView 关联。只有当 WebView 被销毁时才会发布。
namespace
用于标记不同的服务。WVJSBServer *server=[WVJSBServer serverWithWebView:webView ns:@"server namespace"];
-
检查 URL
-
UIWebView
检查 URL 是执行安装的必要步骤。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ return [WVJSBServer canHandleWithWebView:webView URLString:request.URL.absoluteString]; }
-
WKWebView
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{ decisionHandler([WVJSBServer canHandleWithWebView:webView URLString:navigationAction.request.URL.absoluteString]?WKNavigationActionPolicyCancel:WKNavigationActionPolicyAllow); }
-
WebView
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener{ if ([WVJSBServer canHandleWithWebView:webView URLString:request.URL.absoluteString]){ [listener ignore]; }else{ [listener use]; }
-
} ```
-
处理无响应事件
[[server on:@"method"] onEvent:^id(WVJSBConnection * connection, id parameter, WVJSBAckBlock (^done)(void)) { done(); return nil; }];
-
处理连接
[[server on:@"connect"] onEvent:^id(WVJSBConnection * connection, id parameter, WVJSBAckBlock (^done)(void)) { done(); return nil; }];
-
处理断开连接
[[server on:@"disconnect"] onEvent:^id(WVJSBConnection * connection, id parameter, WVJSBAckBlock (^done)(void)) { done(); return nil; }];
-
处理可取消请求
[[server on:@"request"] onEvent:^id(WVJSBConnection * connection, id parameter, WVJSBAckBlock (^done)(void)) { done()(@"response object",nil); return nil; }];
-
处理可取消请求
[[[server on:@"request"] onEvent:^id (WVJSBConnection * connection, id parameter, WVJSBAckBlock (^done)(void)) { //Simulate asynchronous request dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*2), DBL_MAX, 0 * NSEC_PER_SEC); dispatch_source_set_event_handler(timer, ^{ if (arc4random()%2){ done()(@"response object",nil); }else{ done()(nil,"can not find host"); } }); dispatch_resume(timer); //Return the timer as context return timer; }] onCancel:^(id context) { dispatch_source_t timer = context; //Cancel timer dispatch_source_cancel(timer); }];
-
发送请求到 JavaScript 客户端
WVJSBOperation *operation = [[[connection event:@"request" parameter:nil] onAck:^(WVJSBOperation *operation,id result, id exception) { //Do something with result }] timeout:10];
-
取消请求
[operation cancel];
JavaScript 使用
-
创建客户端
const client = WVJSBCreateClient('server namespace',{"infomation key":"infomation value"});
-
处理无响应事件
client.on('method').onEvent(function(parameter,done){ done(); return null; })
-
处理服务器的连接
client.on('connect').onEvent(function(parameter,done){ done(); return null; })
-
处理服务器的断开
client.on('disconnect').onEvent(function(parameter,done){ done(); return null; })
-
处理可取消请求
client.on('request').onEvent(function(parameter,done){ done()('response object',null); return null; })
-
处理可取消请求
client.on('request').onEvent(function(parameter,done){ const context = window.setTimeout(function(){ if(Math.random()<0.5){ done()(null, 'can not find host'); }else{ done()('response object', null); } },2000); return context; }).onCancel(function(context){ window.clearTimeout(context); });
-
请求原生服务器
const operation = client.event('request',null).onAck(function(operation,result, exception){ //do something }).timeout(10000);
-
取消请求
operation.cancel();
运行示例
-
打开终端,执行以下命令
cd pathToProject/WVJSB/Resources/www python -m SimpleHTTPServer
-
然后打开项目并运行
许可证
MIT 许可证
版权所有 (c) 2019 ouyanghuacom
任何人未经许可,均可免费获得本软件和相关的文档文件(“软件”),在此授权下,可以无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得本软件的人进行上述行为,但须遵守以下条件
上述版权声明和本许可协议应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何事件中,无论作者或版权所有者因合同、侵权或其他方式引起的任何索赔、损害或其他责任, Softy 作者或版权所有者均不承担任何责任。