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
相關文章
- OC 與 Swift 相互呼叫Swift
- webview js和java相互呼叫WebViewJSJava
- js和vue方法的相互呼叫(iframe父子頁面的方法相互呼叫)。JSVue
- Flutter 和iOS 混合開發(一)FlutteriOS
- Flutter、iOS混合開發實踐FlutteriOS
- oc與swift檔案的相互呼叫方式——橋接Swift橋接
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架
- iOS開發中使用OC和swift的對比iOSSwift
- Flutter與Native混合開發-FlutterBoost整合應用和開發實踐(iOS)FlutteriOS
- Flutter混合開發-iOSFlutteriOS
- React Native iOS混合開發實戰教程React NativeiOS
- iOS原生混合RN開發最佳實踐iOS
- H5App混合開發JS或TS呼叫原生方法H5APPJS
- C和Go相互呼叫Go
- Flutter混合開發—iOS篇FlutteriOS
- 原生實現C#和Lua相互呼叫-Unity3D可用C#Unity3D
- iOS開發之OC篇(3)—— NSArray、NSMutableArrayiOS
- iOS 開發選擇OC還是Swift?iOSSwift
- WebAssembly實踐指南——C++和Rust透過wasmtime實現相互呼叫例項WebC++RustASM
- 13. iOS開發小細節--OC篇iOS
- 混合開發:flutter整合進iOS工程FlutteriOS
- iOS整合 Flutter 混合工程開發一iOSFlutter
- Android JNI開發系列之Java與C相互呼叫AndroidJava
- WebViewJavascriptBridge JS和OC互動WebViewJavaScriptJS
- iOS UMeng OC和Swift混編iOSSwift
- .NET混合開發解決方案11 WebView2載入的網頁中JS呼叫C#方法WebView網頁JSC#
- iOS與Flutter混合開發的姿勢iOSFlutter
- Flutter 混合開發FlutterBoost iOS 接入流程FlutteriOS
- 原生(iOS)與Flutter混合開發步驟iOSFlutter
- iOS混合開發庫(GICXMLLayout)一、介紹iOSXML
- iOS混合開發庫(GICXMLLayout)五、Texture篇iOSXML
- iOS混合開發庫(GICXMLLayout)七、JavaScript篇iOSXMLJavaScript
- iOS混合開發庫(GICXMLLayout)八、熱更新iOSXML
- python和c++的相互呼叫教程PythonC++
- 現有Android專案中整合Flutter/Flutter混合開發實戰(一)AndroidFlutter
- 混合開發實戰:App里拉起一個小程式(IOS篇)APPiOS
- 【iOS – OC】OC基礎-單例的實現 & 提醒自己注意多執行緒問題iOS單例執行緒
- 輕鬆教你React Native 混合開發(iOS篇)React NativeiOS
- iOS&Flutter混合開發的探索歷程iOSFlutter