這里用是的蘋果原生和JS的交互 、有不明白JavaScriptCore框架的可以去網上搜索下這方面的資料很多
廢話不多說直接上代碼
@protocol JSContextDelegate <JSExport>//這里面寫H5,也就是網頁端定義的方法- (void)isLogin;//如判斷用戶有沒有登錄@end
@interface HtmlShopingViewController ()< JSContextDelegate>@property (nonatomic, strong) UIWebView *mainWebView;@property (nonatomic, strong) JSContext *jsContext;//支付寶返回的狀態碼@property (nonatomic ,strong)NSString * alipayCode;//微信返回的狀態碼@property (nonatomic ,strong)NSString * wxCode;//點擊系統左上角的返回app的狀態碼,這里隨便給一個值,前提是你和H5端商量好的值@property (nonatomic, strong) NSString *backCode@end
- (void)viewDidLoad { [super viewDidLoad]; self.alipayCode = @"";//給初始值 self.wxCode = @"";//給初始值 self.backCode = @"";//給初始值}
接着在webview的代理方法中寫
- (void)webViewDidFinishLoad:(UIWebView *)webView{self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; self.jsContext[@"填H5端的方法名(如abc. 方法名,取abc)"] = self;//也就是填的 self.jsContext[@"abc"] self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) { context.exception = exceptionValue; NSLog(@"異常信息:%@", exceptionValue); }; if (![self.alipayCode isEqualToString:@""]) {//表示有值 NSString *alipayCodeJS=[NSString stringWithFormat:@"h5端的方法名('%@')",self.alipayCode]; //准備執行的js代碼 [self.jsContext evaluateScript: alipayCodeJS];//通過oc方法調用js的alert self.alipayCode = @""; //給回空值 } }
微信的和系統返回鍵的值同理、這里就只寫支付寶 怎么傳值可以參考http://www.jianshu.com/p/2536a7d689a5
#pragma mark - 支付寶支付后接收的值(狀態碼)- (void)aliPayReslut:(NSNotification *)notfication { self.alipayCode = notfication.userInfo[@"resultStatus"];//支付寶的傳回來的值 [self.mainWebView reload];//刷新WebView }
支付寶在傳值的時候需要注意一下
上面的是在手機上安裝了支付寶客戶端,沒有安裝客戶端的情況就需要在支付寶在沒有客戶端的時候傳回狀態碼的地方調用
//此方法只在沒有支付寶客戶端的時候傳支付的狀態碼 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { self.alipayCode = resultDic[@"resultStatus"]; [self.mainWebView reload]; }];
最后在寫一個在支付過程中直接點擊左上角的返回App的處理
當點擊左上角返回App的時候回調用AppDelegate.h用的這個方法
- (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. [[NSNotificationCenter defaultCenter]postNotificationName:@"resumeBack" object:nil userInfo:nil]; }
上面同和支付寶一樣的傳值給H5端,進行界面跳轉處理。OK寫到這里就搞定了支付寶、微信回調傳值給H5網頁,寫的不好莫怪。
關注微信公眾號
學習區塊鏈
如果你覺得我的文章對你有幫助,請支持我,你的支持是我最大的動力

