iOS中JS和OC相互呼叫實現混合開發(JavaScriptCore)
目前JS呼叫OC主要分為兩種情況
1.JS裡面直接呼叫方法;
2.JS裡通過物件呼叫方法;
方式1:JS裡面直接呼叫方法(使用block),該方式開發中一般不採用,故簡單代過
//網頁載入完成呼叫此方法
-(void)webViewDidFinishLoad:(UIWebView*)webView
{
//iOS呼叫JS ,首先建立JSContext 物件(此處通過當前webView的鍵獲取到jscontext)
JSContext*context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//js呼叫iOS
//第一種情況
//其中test1就是js的方法名稱,賦給是一個block 裡面是iOS程式碼
//此方法最終將列印出所有接收到的引數,js引數是不固定的 我們測試一下就知道
context[@"test1"] = ^() {
NSArray*args = [JSContextcurrentArguments];
for(id obj in args) {
NSLog(@"%@",obj);
}
};
//首先準備一下js程式碼,來呼叫js的函式test1 然後執行
//一個引數
NSString*jsFunctStr=@"test1('引數1')";
[contextevaluateScript:jsFunctStr];
//二個引數
NSString*jsFunctStr1=@"test1('引數a','引數b')";
[contextevaluateScript:jsFunctStr1];
}
方式2:JS裡通過物件呼叫方法
新建IOSBridge繼承自NSObject,然後匯入JS互動類庫標頭檔案#import<JavaScriptCore/JavaScriptCore.h>
(1).首先建立一個實現了JSExport協議的協議
@protocol IOSBridgeProtocol
-(NSString*)getData:(NSString*)params;
-(NSString*)doAction:(NSString*)params;
@end
(2).定義代理屬性
@property(nonatomic, weak) id delegate;
(3).在IOSBridge.m檔案中實現方法
-(NSString*)getData:(NSString*)params
{
TTLog(@"呼叫了getData--- %@",params);
return @"黃文濤";
}
-(NSString*)doAction:(NSString*)params
{
TTLog(@"呼叫了doAction--- %@",params);
return @"黃文濤";
}
(4).如何使用
匯入#import"IOSBridge.h"
然後,定義私有屬性
@property(nonatomic, strong) JSContext*context;
獲取JSContext
_context= [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
IOSBridge*iOSBridge = [[IOSBridge alloc] init];
self.context[@"IOSBridge"] = iOSBridge;
ok ,兩種方式都完成了,歡迎交流指正, 本人QQ:1334627194
相關文章
- iOS下JS與OC互相呼叫(四)--JavaScriptCoreiOSJSJavaScript
- iOS開發:網頁JS與OC互動(JavaScriptCore)iOS網頁JSJavaScript
- OC 與 Swift 相互呼叫Swift
- Hybrid App開發模式中, IOS/Android 和 JavaScript相互呼叫方式APP模式iOSAndroidJavaScript
- webview js和java相互呼叫WebViewJSJava
- Flutter 和iOS 混合開發(一)FlutteriOS
- iOS下JS與OC互相呼叫(八)--Cordova詳解+實戰iOSJS
- Flutter、iOS混合開發實踐FlutteriOS
- Swift和Objective-C混合程式設計——Swift呼叫OCSwiftObject程式設計
- Swift和Objective-C混合程式設計——OC呼叫SwiftSwiftObject程式設計
- iOS下JS與原生OC互相呼叫(總結)iOSJS
- iOS下JS與OC互相呼叫(三)--MessageHandleriOSJS
- js和vue方法的相互呼叫(iframe父子頁面的方法相互呼叫)。JSVue
- iOS下JS與OC互相呼叫(五)--UIWebView + WebViewJavascriptBridgeiOSJSUIWebViewJavaScript
- iOS下JS與OC互相呼叫(六)--WKWebView + WebViewJavascriptBridgeiOSJSWebViewJavaScript
- iOS下JS與OC互相呼叫(七)--Cordova 基礎iOSJS
- Android和js的混合開發AndroidJS
- iOS 與 JS 互動手冊 - JavaScriptCoreiOSJSJavaScript
- Flutter混合開發-iOSFlutteriOS
- oc與swift檔案的相互呼叫方式——橋接Swift橋接
- iOS原生混合RN開發最佳實踐iOS
- iOS下JS與OC互相呼叫(一)--UIWebView 攔截URLiOSJSUIWebView
- iOS下JS與OC互相呼叫(二)--WKWebView 攔截URLiOSJSWebView
- Flutter與Native混合開發-FlutterBoost整合應用和開發實踐(iOS)FlutteriOS
- 在 iOS 中實現方法鏈呼叫iOS
- H5App混合開發JS或TS呼叫原生方法H5APPJS
- iOS開發中使用OC和swift的對比iOSSwift
- React Native iOS混合開發實戰教程React NativeiOS
- Flutter混合開發—iOS篇FlutteriOS
- C和Go相互呼叫Go
- Java和groovy相互呼叫Java
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架
- 原生實現C#和Lua相互呼叫-Unity3D可用C#Unity3D
- AndroidJS相互呼叫詳解AndroidJS
- iOS開發——OC編碼規範iOS
- js實現的字串和陣列的相互轉換JS字串陣列
- Android混合開發之WebViewJavascriptBridge實現JS與java安全互動AndroidWebViewJavaScriptJS
- iOS開發之OC篇(3)—— NSArray、NSMutableArrayiOS