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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 隨著H5技術的興起,在iOS開發過程中,難免會遇到原生應用需要和H5頁面交互的問題。其中會涉及方法調用及參數傳值等...
    Chris_js閱讀 3,114評論 1 8
  • 我們講到的iOS調用js下來我們使用js調用iOSjs調用iOS分兩種情況 一,js里面直接調用方法 二,js里面...
    默默的前行閱讀 884評論 0 1
  • 蘋果公布了JavaScriptCore.framework 它使得JS與OC的交互更加方便了。 一、iOS調用js...
    1d5cb7cff98d閱讀 1,151評論 0 0
  • 跟原生開發相比,H5的開發相對來一個成熟的框架和團隊來講在開發速度和開發效率上有著比原生很大的優勢,至少不用等待審...
    大沖哥閱讀 1,865評論 0 7
  • 晨見日記第二篇 昨天:昨天晚上開始制定計劃。 1、早上4點半起床:@喝一杯溫水@上廁所@簡單洗臉:讓自己很快清醒@...
    本色相閱讀 186評論 0 0