From 1c223f4e9607e05941976e2301e8bb26f0b99b21 Mon Sep 17 00:00:00 2001 From: wendux <824783146@qq.com> Date: Tue, 13 Jun 2017 16:29:27 +0800 Subject: [PATCH 01/10] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 94a477c..d48ae99 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android +更新指南:https://juejin.im/post/58eded595c497d0062cf972b + ## Usage 1. Implement API delegate class in Object-C @@ -148,4 +150,4 @@ In order to prevent unnecessary obstruction, the alert dialog was implemented as ### Finally -If you like DSBridge, please star to let more people know it , Thank you 😄. \ No newline at end of file +If you like DSBridge, please star to let more people know it , Thank you 😄. From a048712a935d12e1f2075a68d71530ecce911c55 Mon Sep 17 00:00:00 2001 From: wendux <824783146@qq.com> Date: Tue, 13 Jun 2017 18:13:52 +0800 Subject: [PATCH 02/10] Create README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d48ae99..0283ee7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android -更新指南:https://juejin.im/post/58eded595c497d0062cf972b +2.0更新列表:https://juejin.im/post/593fa055128fe1006aff700a ## Usage From dcf10d37dd6f3d692ca723dbdbf6ff74d7501c26 Mon Sep 17 00:00:00 2001 From: "wen.du" Date: Thu, 15 Jun 2017 13:01:43 +0800 Subject: [PATCH 03/10] support pod --- dsBridge.podspec | 138 +++++++++++++++++++++++++++++ dsbridge.xcodeproj/project.pbxproj | 14 +++ 2 files changed, 152 insertions(+) create mode 100644 dsBridge.podspec diff --git a/dsBridge.podspec b/dsBridge.podspec new file mode 100644 index 0000000..efd032e --- /dev/null +++ b/dsBridge.podspec @@ -0,0 +1,138 @@ +# +# Be sure to run `pod spec lint dsBridge.podspec' to ensure this is a +# valid spec and to remove all comments including this before submitting the spec. +# +# To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html +# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ +# + +Pod::Spec.new do |s| + + # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # These will help people to find your library, and whilst it + # can feel like a chore to fill in it's definitely to your advantage. The + # summary should be tweet-length, and the description more in depth. + # + + s.name = "dsBridge" + s.version = "2.0.1" + s.summary = "An ios bridge for calling functions synchronously and asynchronously between JavaScript and Object-C in WKWebView/UIWebView" + + # This description is used to generate tags and improve search results. + # * Think: What does it do? Why did you write it? What is the focus? + # * Try to keep it short, snappy and to the point. + # * Write the description between the DESC delimiters below. + # * Finally, don't worry about the indent, CocoaPods strips it! + s.description = <<-DESC + An javascript bridge for calling functions synchronously and asynchronously + DESC + + s.homepage = "https://github.com/wendux/DSBridge-IOS.git" + # s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" + + + # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Licensing your code is important. See http://choosealicense.com for more info. + # CocoaPods will detect a license file if there is a named LICENSE* + # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. + # + + s.license = "MIT" + # s.license = { :type => "MIT", :file => "FILE_LICENSE" } + + + # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the authors of the library, with email addresses. Email addresses + # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also + # accepts just a name if you'd rather not provide an email address. + # + # Specify a social_media_url where others can refer to, for example a twitter + # profile URL. + # + + s.author = { "lazydu" => "824783146@qq.com" } + # Or just: s.author = "lazydu" + # s.authors = { "lazydu" => "824783146@qq.com" } + # s.social_media_url = "http://twitter.com/wen.du" + + # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If this Pod runs only on iOS or OS X, then specify the platform and + # the deployment target. You can optionally include the target after the platform. + # + + s.platform = :ios + # s.platform = :ios, "5.0" + + # When using multiple platforms + # s.ios.deployment_target = "5.0" + # s.osx.deployment_target = "10.7" + # s.watchos.deployment_target = "2.0" + # s.tvos.deployment_target = "9.0" + + + # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Specify the location from where the source should be retrieved. + # Supports git, hg, bzr, svn and HTTP. + # + + s.source = { :git => "https://github.com/wendux/DSBridge-IOS.git", :tag => "#{s.version}" } + + + # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # CocoaPods is smart about how it includes source code. For source files + # giving a folder will include any swift, h, m, mm, c & cpp files. + # For header files it will include any header in the folder. + # Not including the public_header_files will make all headers public. + # + + s.source_files = "dsbridge/*" + #s.exclude_files = "Classes/Exclude" + + s.public_header_files = "dsbridge/*.h" + + + # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # A list of resources included with the Pod. These are copied into the + # target bundle with a build phase script. Anything else will be cleaned. + # You can preserve files from being cleaned, please don't preserve + # non-essential files like tests, examples and documentation. + # + + # s.resource = "icon.png" + # s.resources = "Resources/*.png" + + # s.preserve_paths = "FilesToSave", "MoreFilesToSave" + + + # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # Link your library with frameworks, or libraries. Libraries do not include + # the lib prefix of their name. + # + + # s.framework = "UIKit","JavaScriptCore" + # s.frameworks = "SomeFramework", "AnotherFramework" + + # s.library = "iconv" + # s.libraries = "iconv", "xml2" + + + # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + # + # If your library depends on compiler flags you can set them in the xcconfig hash + # where they will only apply to your library. If you depend on other Podspecs + # you can include multiple dependencies to ensure it works. + + # s.requires_arc = true + + # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } + # s.dependency "JSONKit", "~> 1.4" + +end diff --git a/dsbridge.xcodeproj/project.pbxproj b/dsbridge.xcodeproj/project.pbxproj index 62df9d0..b610cee 100644 --- a/dsbridge.xcodeproj/project.pbxproj +++ b/dsbridge.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 818F0BC91E18DD3600679925 /* JsApiTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 818F0BC81E18DD3600679925 /* JsApiTest.m */; }; 818F0BCD1E18E6D200679925 /* libdsbridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 818F0B8E1E18C08100679925 /* libdsbridge.a */; }; 818F0BD01E1A820B00679925 /* test.html in Resources */ = {isa = PBXBuildFile; fileRef = 818F0BCF1E1A820B00679925 /* test.html */; }; + 81EBBFFC1EF24A7300D1E4C1 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -83,6 +84,8 @@ 818F0BCB1E18DE7100679925 /* JsApiTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JsApiTest.h; sourceTree = ""; }; 818F0BCE1E1A3EEE00679925 /* JSBWebEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBWebEventDelegate.h; sourceTree = ""; }; 818F0BCF1E1A820B00679925 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; + 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsBridge.podspec; sourceTree = ""; }; + 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -90,6 +93,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 81EBBFFC1EF24A7300D1E4C1 /* JavaScriptCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -107,9 +111,11 @@ 818F0B851E18C08100679925 = { isa = PBXGroup; children = ( + 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */, 818F0B901E18C08100679925 /* dsbridge */, 818F0B9F1E18C0AA00679925 /* dsbridgedemo */, 818F0B8F1E18C08100679925 /* Products */, + 81EBBFFA1EF24A7300D1E4C1 /* Frameworks */, ); sourceTree = ""; }; @@ -167,6 +173,14 @@ name = "Supporting Files"; sourceTree = ""; }; + 81EBBFFA1EF24A7300D1E4C1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ From b3e2caa3926796716151705f43ff094d8f570265 Mon Sep 17 00:00:00 2001 From: "wen.du" Date: Thu, 15 Jun 2017 13:09:05 +0800 Subject: [PATCH 04/10] support pod --- README.md | 8 ++++++++ dsbridge.xcodeproj/project.pbxproj | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/README.md b/README.md index 94a477c..8b91dc9 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,19 @@ # DSBridge-v2.0 +[![](https://img.shields.io/cocoapods/v/dsBridge.svg?style=flat)](https://jitpack.io/#wendux/DSBridge-Android) [![MIT Licence](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://opensource.org/licenses/mit-license.php) + > DSBridge is currently the best Javascript bridge in the world , by which we can call functions synchronously and asynchronously between web and Native . Moreover, both android and ios are supported ! DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android +## Download + +```objective-c +pod "dsBridge" +``` + ## Usage 1. Implement API delegate class in Object-C diff --git a/dsbridge.xcodeproj/project.pbxproj b/dsbridge.xcodeproj/project.pbxproj index b610cee..4c84be3 100644 --- a/dsbridge.xcodeproj/project.pbxproj +++ b/dsbridge.xcodeproj/project.pbxproj @@ -28,6 +28,8 @@ 818F0BCD1E18E6D200679925 /* libdsbridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 818F0B8E1E18C08100679925 /* libdsbridge.a */; }; 818F0BD01E1A820B00679925 /* test.html in Resources */ = {isa = PBXBuildFile; fileRef = 818F0BCF1E1A820B00679925 /* test.html */; }; 81EBBFFC1EF24A7300D1E4C1 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */; }; + 81EBBFFF1EF24DDE00D1E4C1 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 81EBBFFD1EF24DDE00D1E4C1 /* README.md */; }; + 81EBC0001EF24DDE00D1E4C1 /* README-chs.md in Sources */ = {isa = PBXBuildFile; fileRef = 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,6 +88,8 @@ 818F0BCF1E1A820B00679925 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsBridge.podspec; sourceTree = ""; }; 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + 81EBBFFD1EF24DDE00D1E4C1 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = "README-chs.md"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -111,6 +115,8 @@ 818F0B851E18C08100679925 = { isa = PBXGroup; children = ( + 81EBBFFD1EF24DDE00D1E4C1 /* README.md */, + 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */, 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */, 818F0B901E18C08100679925 /* dsbridge */, 818F0B9F1E18C0AA00679925 /* dsbridgedemo */, @@ -277,10 +283,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 81EBBFFF1EF24DDE00D1E4C1 /* README.md in Sources */, 818F0BC01E18C59200679925 /* JSBUtil.m in Sources */, 818F0BBD1E18C58000679925 /* DWebview.m in Sources */, 818F0BB71E18C3B800679925 /* DWKwebview.m in Sources */, 818F0BBA1E18C45E00679925 /* DUIwebview.m in Sources */, + 81EBC0001EF24DDE00D1E4C1 /* README-chs.md in Sources */, 818F0B931E18C08100679925 /* dsbridge.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From d39e1fd62214e79e0a8d3390fe7d7fcda7f335fe Mon Sep 17 00:00:00 2001 From: "wen.du" Date: Thu, 15 Jun 2017 13:14:21 +0800 Subject: [PATCH 05/10] support pod --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b91dc9..0573b75 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android + + ## Download ```objective-c @@ -156,4 +158,4 @@ In order to prevent unnecessary obstruction, the alert dialog was implemented as ### Finally -If you like DSBridge, please star to let more people know it , Thank you 😄. \ No newline at end of file +If you like DSBridge, please star to let more people know it , Thank you 😄. From 92f92075b92dd4c6320660e21725c2cf2a965f48 Mon Sep 17 00:00:00 2001 From: "wen.du" Date: Thu, 15 Jun 2017 13:16:41 +0800 Subject: [PATCH 06/10] update doc --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0573b75..8590245 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ DSBridge-IOS:https://github.com/wendux/DSBridge-IOS DSBridge-Android:https://github.com/wendux/DSBridge-Android - +2.0更新列表:https://juejin.im/post/593fa055128fe1006aff700a ## Download From 73f551911f66eb7cba6590c72cebe662505a8c2b Mon Sep 17 00:00:00 2001 From: "wen.du" Date: Fri, 16 Jun 2017 12:18:19 +0800 Subject: [PATCH 07/10] Modify alert/confirm/prompt dialog functions implement. --- .../Debug-iphonesimulator/libdsbridge.a | Bin 489368 -> 491512 bytes README-chs.md | 188 ------------------ README.md | 4 +- dsBridge.podspec | 2 +- dsbridge.xcodeproj/project.pbxproj | 4 - dsbridge/DWKwebview.h | 2 - dsbridge/DWKwebview.m | 50 +++-- 7 files changed, 38 insertions(+), 212 deletions(-) delete mode 100644 README-chs.md diff --git a/Build/Products/Debug-iphonesimulator/libdsbridge.a b/Build/Products/Debug-iphonesimulator/libdsbridge.a index 381a811ba6dd68f20a872840ba05d56652b4df80..8dff2b883b342959246270c15b9d0ae161835c82 100644 GIT binary patch delta 71459 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 DSBridge是目前地球上最好的IOS/Android javascript bridge. 通过它可以在web和native之间调用彼此方法。DSBridge是目前唯一一个支持同步调用的跨平台Js bridge. - -DSBridge-IOS github:https://github.com/wendux/DSBridge-IOS - -## 使用 - -1. Native 实现API 代理类 - - ```objective-c - //JsApiTest.m - @implementation JsApiTest - //for synchronous invocation - - (NSString *) testSyn:(NSDictionary *) args - { - return [(NSString *)[args valueForKey:@"msg"] stringByAppendingString:@"[ syn call]"]; - } - //for asynchronous invocation - - (NSString *) testAsyn:(NSDictionary *) args :(void (^)(NSString * _Nullable result))handler - { - handler([(NSString *)[args valueForKey:@"msg"] stringByAppendingString:@"[ asyn call]"]); - } - @end - ``` - -2. 注册api代理类至DWebview - - ```objective-c - DWebview * webview=[[DWebview alloc] initWithFrame:bounds]; - jsApi=[[JsApiTest alloc] init]; - webview.JavascriptInterfaceObject=jsApi; - ``` - -3. 在Javascript中调用Native API - - ```javascript - //Call Native API - var bridge = getJsBridge(); - //Call synchronously - var str=bridge.call("testSyn", {msg: "testSyn"}); - //Call asynchronously - bridge.call("testAsyn", {msg: "testAsyn"}, function (v) { - alert(v); - }) - - //Test will be called by oc, must be global function! - function test(arg1,arg2){ - return arg1+arg2; - } - ``` - -4. 最后,Native中调用Javascript API - - ```objective-c - [_webview callHandler:@"test" - arguments:[[NSArray alloc] initWithObjects:@1,@"hello", nil] - completionHandler:^(NSString * value){ - NSLog(@"%@",value); - }]; - ``` - - - -## Javascript API 介绍 - -### getJsBridge - -获取javascript bridge 对象;此方法为sdk内置,可在任何地方调用。 - -### bridge.call(method,[args,callback]) - -功能:调用Native api - -method: api函数名 - -args:参数,类型:json, 可选参数 - -callback(String returnValue): 处理调用结果的回调,**仅异步调用时需要**. - - - -## 注意 - -### Native API 方法签名 - -**为了在ios和android平台下兼容,对IOS端Native API接口约定如下:** - -1. 所有API返回值类型为NSString, 不存在时返回nil即可。 -2. 参数以JSON传递; DSBridge会将js参数自动转化为NSDictionary - -注:JsApiTest.m中实现的方法可以不在JsApiTest.h中声明 - -### 调用Javascript - -DWebView提供了两个api用于调用js - -```objective-c -//调用js api(函数) --(void)callHandler:(NSString *)methodName arguments:(NSArray * _Nullable)args - completionHandler:(void (^)(NSString * _Nullable))completionHandler; -//执行任意js代码 -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(void (^ _Nullable)(NSString * _Nullable))completionHandler; -``` - -callHandler中,methodName 为js函数名,args为参数数组,可以接受数字、字符串等。 - -两个函数中completionHandler为完成回调,用于获取js执行的结果。 - -**调用时机** - -DWebview只有在javascript context初始化成功后才能正确执行js代码,而javascript context初始化完成的时机一般都比整个页面加载完毕要早,随然DSBridge能捕获到javascript context初始化完成的时机,但是一些js api可能声明在页面尾部,甚至单独的js文件中,如果在javascript context刚初始化完成就调用js api, 此时js api 可能还没有加载,所以会失败,为此专门提供了一个api设置一个回调,它会在页面加载结束后调用,为了和didpagefinished区分,我们取名如下: - -```objective-c -- (void)setJavascriptContextInitedListener:(void(^_Nullable)(void))callback; -``` - - 若是端上主动调用js,请在此回调中进行 。示例如下: - -```objective-c -__block DWebview * _webview=webview; -[webview setJavascriptContextInitedListener:^(){ - [_webview callHandler:@"test" - arguments:[[NSArray alloc] initWithObjects:@1,@"hello", nil] - completionHandler:^(NSString * value){ - NSLog(@"%@",value); - }]; -}]; -``` - -完整的示例请查看demo工程。 - - -### 关于DWebview - -SDK中有三个webview: - -DWKwebview:继承自WKWebView,内部已经实现js prompt、alert、confirm函数对应的对话框。 - -DUIwebview:继承自UIWebView - -DWebview:自定义view, 内部在ios8.0以下会使用DUIwebview, 大于等于8.0会使用DWKwebview。 - -所有的webview除了都实现了上述api之外,提供了一个加载网页的便捷函数: - -```objective-c -- (void)loadUrl: (NSString *) url; -``` - - **您可以根据具体业务使用任意一个**,不过一般情况下优先选用DWebview,它在新设备上更省资源,效率更高。 - -DWebview还提供了一些其它api和属性,具体请查看其头文件,需要特殊说明的是,有一个api: - -```objective-c -- (id _Nullable) getXWebview; -``` - -它可以返回DWebview内部使用的真实webview, 值会是DUIwebview和DWKwebview的实例之一,您可以通过isKindOfClass来判断,吃函数主要用于扩展DWebview,下面可以看一下loadRequest的大概实现: - -```objective-c -- (void)loadRequest:(NSURLRequest *)request -{ - id webview=[self getXWebview]; - if([webview isKindOfClass:[DUIwebview class]]){ - [(DUIwebview *)webview loadRequest:request]; - }else{ - [(DWKwebview *)webview loadRequest:request]; - } -} -``` - -### Alert dialog - -DWebview已经实现 alert、prompt、comfirm对话框,您可以不做处理,也可以自定义。值得一提的是js 在调用alert函数正常情况下只要用户没有关闭alert对话框,js代码是会阻塞的,但是考虑到alert 对话框只有一个确定按钮,也就是说无论用户关闭还是确定都不会影响js代码流程,所以**DWebview中在弹出alert对话框时会先给js返回**,这样一来js就可以继续执行,而提示框等用户关闭时在关闭即可。如果你就是想要阻塞的alert,可以自定义。而DWebview的prompt、comfirm实现完全符合ecma标准,都是阻塞的。 - -请不要手动设置DUIwebview的delegate属性,因为DUIwebview在内部已经设置了该属性,如果您需要自己处理页面加载过程,请设置WebEventDelegate属性。 - -### 相关资料 - -DSBridge-Android:https://github.com/wendux/DSBridge-Android - -与WebViewJavascriptBridge的对比 [DSBridge VS WebViewJavascriptBridge]( http://www.jianshu.com/p/d967b0d85b97)。 - -### 拉票 - -如果你觉得不错,麻烦star一下以便让更多人知道😄。 - diff --git a/README.md b/README.md index 8590245..4b2c133 100644 --- a/README.md +++ b/README.md @@ -152,9 +152,9 @@ There are three webviews available, DWKwebview、DUIwebview and DWebview, all If you're using DUIwebview, don't set the delegate prop. because the delegate prop has been setted inner , please set WebEventDelegate instead ! -### Alert dialog +### Alert/confirm/prompt -In order to prevent unnecessary obstruction, the alert dialog was implemented asynchronously , that is to say, if you call alert in javascript , it will be returned directly no matter whether the user has to deal with. becase the code flow is not subject to the user operation no matter whether user click ok button or close the alert dialog. if you don't need this feature, you can custom the alert dialog by override "onJsAlert" callback in WebChromeClient class. +For alert/confirm/prompt dialog, DSBridge has implemented them all by default. ### Finally diff --git a/dsBridge.podspec b/dsBridge.podspec index efd032e..3e2c8d4 100644 --- a/dsBridge.podspec +++ b/dsBridge.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "dsBridge" - s.version = "2.0.1" + s.version = "2.0.2" s.summary = "An ios bridge for calling functions synchronously and asynchronously between JavaScript and Object-C in WKWebView/UIWebView" # This description is used to generate tags and improve search results. diff --git a/dsbridge.xcodeproj/project.pbxproj b/dsbridge.xcodeproj/project.pbxproj index 4c84be3..4d27cb4 100644 --- a/dsbridge.xcodeproj/project.pbxproj +++ b/dsbridge.xcodeproj/project.pbxproj @@ -29,7 +29,6 @@ 818F0BD01E1A820B00679925 /* test.html in Resources */ = {isa = PBXBuildFile; fileRef = 818F0BCF1E1A820B00679925 /* test.html */; }; 81EBBFFC1EF24A7300D1E4C1 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */; }; 81EBBFFF1EF24DDE00D1E4C1 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 81EBBFFD1EF24DDE00D1E4C1 /* README.md */; }; - 81EBC0001EF24DDE00D1E4C1 /* README-chs.md in Sources */ = {isa = PBXBuildFile; fileRef = 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -89,7 +88,6 @@ 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsBridge.podspec; sourceTree = ""; }; 81EBBFFB1EF24A7300D1E4C1 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 81EBBFFD1EF24DDE00D1E4C1 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = "README-chs.md"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -116,7 +114,6 @@ isa = PBXGroup; children = ( 81EBBFFD1EF24DDE00D1E4C1 /* README.md */, - 81EBBFFE1EF24DDE00D1E4C1 /* README-chs.md */, 81EBBFF71EF246BD00D1E4C1 /* dsBridge.podspec */, 818F0B901E18C08100679925 /* dsbridge */, 818F0B9F1E18C0AA00679925 /* dsbridgedemo */, @@ -288,7 +285,6 @@ 818F0BBD1E18C58000679925 /* DWebview.m in Sources */, 818F0BB71E18C3B800679925 /* DWKwebview.m in Sources */, 818F0BBA1E18C45E00679925 /* DUIwebview.m in Sources */, - 81EBC0001EF24DDE00D1E4C1 /* README-chs.md in Sources */, 818F0B931E18C08100679925 /* dsbridge.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/dsbridge/DWKwebview.h b/dsbridge/DWKwebview.h index 6cde14b..d88bf8e 100644 --- a/dsbridge/DWKwebview.h +++ b/dsbridge/DWKwebview.h @@ -10,8 +10,6 @@ @interface DWKwebview : WKWebView { - bool confirmDone; - BOOL confirmResult; void(^javascriptContextInitedListener)(void); } diff --git a/dsbridge/DWKwebview.m b/dsbridge/DWKwebview.m index 96608c2..c529d25 100644 --- a/dsbridge/DWKwebview.m +++ b/dsbridge/DWKwebview.m @@ -10,6 +10,13 @@ #import "JSBUtil.h" @implementation DWKwebview +{ + void(^alertHandler)(void); + void (^confirmHandler)(BOOL); + void (^promptHandler)(NSString *); + int dialogType; + UITextField *txtName; +} /* // Only override drawRect: if you perform custom drawing. @@ -21,6 +28,11 @@ - (void)drawRect:(CGRect)rect { -(instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration { + txtName=nil; + dialogType=0; + alertHandler=nil; + confirmHandler=nil; + promptHandler=nil; //NSString * js=@"function setupWebViewJavascriptBridge(b){var a={call:function(d,c){return prompt('_dspiercall='+d,c)}};b(a)};"; NSString * js=[@"_dswk='_dsbridge=';" stringByAppendingString: INIT_SCRIPT]; @@ -63,16 +75,13 @@ - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSSt initiatedByFrame:frame completionHandler:completionHandler]; }else{ + dialogType=3; + promptHandler=completionHandler; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:prompt message:@"" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alert setAlertViewStyle:UIAlertViewStylePlainTextInput]; - UITextField *txtName = [alert textFieldAtIndex:0]; + txtName = [alert textFieldAtIndex:0]; txtName.text=defaultText; [alert show]; - while (!confirmDone){ - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; - } - confirmDone=false; - completionHandler([txtName text]); } } } @@ -89,13 +98,14 @@ - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSStrin initiatedByFrame:frame completionHandler:completionHandler]; }else{ + dialogType=1; + alertHandler=completionHandler; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:message - delegate:nil + delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil,nil]; - completionHandler(); [alertView show]; } } @@ -110,6 +120,8 @@ -(void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSStri initiatedByFrame:frame completionHandler:completionHandler]; }else{ + dialogType=2; + confirmHandler=completionHandler; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:message @@ -117,18 +129,26 @@ -(void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSStri cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alertView show]; - while (!confirmDone){ - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; - } - confirmDone=false; - completionHandler(confirmResult); } } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { - confirmDone=true; - confirmResult=buttonIndex==1?YES:NO; + if(dialogType==1 && alertHandler){ + alertHandler(); + alertHandler=nil; + }else if(dialogType==2 && confirmHandler){ + confirmHandler(buttonIndex==1?YES:NO); + confirmHandler=nil; + }else if(dialogType==3 && promptHandler && txtName) { + if(buttonIndex==1){ + promptHandler([txtName text]); + }else{ + promptHandler(@""); + } + promptHandler=nil; + txtName=nil; + } } - (void)setJavascriptContextInitedListener:(void (^)(void))callback From 9ab3e1dcf40f6b8d07cb31180f5eeca342cb990f Mon Sep 17 00:00:00 2001 From: wendux <824783146@qq.com> Date: Tue, 31 Oct 2017 21:05:46 -0500 Subject: [PATCH 08/10] Update README.md --- README.md | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 4b2c133..7b2768f 100644 --- a/README.md +++ b/README.md @@ -46,20 +46,28 @@ pod "dsBridge" 3. Call Object-C API in Javascript, and declare a global javascript function for the following Object-c invocation. - ```javascript - - //Call synchronously - var str=dsBridge.call("testSyn", {msg: "testSyn"}); - //Call asynchronously - dsBridge.call("testAsyn", {msg: "testAsyn"}, function (v) { - alert(v); - }) - - //Register javascrit function for Object-c invocation - dsBridge.register('addValue',function(r,l){ - return r+l; - }) - ``` + - Init dsBridge + + ```javascript + window._dsbridge&&_dsbridge.init(); + ``` + + - Call API + + ```javascript + + //Call synchronously + var str=dsBridge.call("testSyn", {msg: "testSyn"}); + + //Call asynchronously + dsBridge.call("testAsyn", {msg: "testAsyn"}, function (v) { + alert(v); + }) + //Register javascrit function for Native invocation + dsBridge.register('addValue',function(l,r){ + return l+r; + }) + ``` 4. Call Javascript function in Object-C . From 08ddf49f5cab42cc70cca252374b02ebbf7942c8 Mon Sep 17 00:00:00 2001 From: wendux <824783146@qq.com> Date: Tue, 31 Oct 2017 21:10:08 -0500 Subject: [PATCH 09/10] Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7b2768f..9d92071 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ pod "dsBridge" //for synchronous invocation - (NSString *) testSyn:(NSDictionary *) args { + // The return value type can only be NSString return [(NSString *)[args valueForKey:@"msg"] stringByAppendingString:@"[ syn call]"]; } //for asynchronous invocation @@ -46,7 +47,7 @@ pod "dsBridge" 3. Call Object-C API in Javascript, and declare a global javascript function for the following Object-c invocation. - - Init dsBridge + - Init dsBridge ```javascript window._dsbridge&&_dsbridge.init(); @@ -111,7 +112,7 @@ function: javascript method body. In order to be compatible with IOS and Android, we make the following convention on native api signature: -1. The tye of return value must be NSString; if not need, just return nil. +1. The tye of return value must be **NSString**; if not need, just return nil. 2. The arguments passed by NSDictionary, if the API doesn't need argument, you still need declare the argument. ### Call javascript code @@ -156,7 +157,7 @@ __block DWebview * _webview=webview; There are three webviews available, DWKwebview、DUIwebview and DWebview, all of them provide the same interface, you can user any one you want. It is worth mentioning that the DWebview is just a proxy of DWKwebview and DUIwebview, while the ios system vesion >=8.0 , DWKwebview will be used, otherwise, DUIwebview will be. -### warnnig +### Warnnig If you're using DUIwebview, don't set the delegate prop. because the delegate prop has been setted inner , please set WebEventDelegate instead ! From 96e1c0b40609d0b44221b8e9ac61c050bd39ed2d Mon Sep 17 00:00:00 2001 From: wendux <824783146@qq.com> Date: Thu, 23 Nov 2017 16:04:01 +0800 Subject: [PATCH 10/10] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d92071..7ff1078 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,11 @@ pod "dsBridge" - Init dsBridge ```javascript - window._dsbridge&&_dsbridge.init(); + //cdn + // + //npm + //npm install dsbridge + var dsBridge=require("dsbridge") ``` - Call API