iOS 原生與JS 交互 context

添加JSExport協議的協議,規定的方法變量等,就會對js開放,我們可以通過js調用到

比如: JS方法為? (JS內調用)

testobject.Test1Parameter('參數1')

那么 我們在oc中添加的代理方法就為(OC內定義)

-(void)test1Parameter:(NSString *)message;

如果js是多個參數的話? 我們代理方法的所有變量前的名字連起來要和js的方法名字一樣比如:

js方法為

testobject.test2Parameter2ndParameter('參數A','參數B')

他有兩個參數 那么我們的代理方法 就是把js的方法名? TestTowParameterSecondParameter 任意拆分成兩段作為代理方法名(此處我們拆分為 test2Parameter 和 2ndParameter ) 那么我們的代理方法就是

-(void)test2Parameter:(NSString)message1 2ndParameter:(NSString)message2;

首先創建一個類 繼承NSObject 并且規定一個協議

//首先創建一個實現了JSExport協議的協議

@protocol TestJSObjectProtocol

//此處我們測試幾種參數的情況

-(void)testNOParameter;

-(void)test1Parameter:(NSString)message;

-(void)test2Parameter:(NSString

)message1 2ndParameter:(NSString *)message2;

@end

//讓我們創建的類實現上邊的協議

@interface TestJSObject : NSObject

@end

類的實現

/#import "TestJSObject.h"

@implementation TestJSObject

//一下方法都是只是打了個log 等會看log 以及參數能對上就說明js調用了此處的iOS 原生方法

-(void)testNOParameter

{

NSLog(@"this is ios testNOParameter");

}

-(void)test1Parameter:(NSString)message

{

NSLog(@"this is ios test1Parameter=%@",message);

}

-(void)test2Parameter:(NSString

)message1 2ndParameter:(NSString *)message2

{

NSLog(@"this is ios test2Parameter=%@ ?2nd=%@",message1,message2);

}

@end

下面我們在weibview加載完成之后調用測試一下

代碼如下:

-(void)webViewDidFinishLoad:(UIWebView *)webView

{

//網頁加載完成調用此方法

//首先創建JSContext 對象(此處通過當前webView的鍵獲取到jscontext)

JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//第二種情況,js是通過對象調用的,我們假設js里面有一個對象 testobject 在調用方法

//首先創建我們新建類的對象,將他賦值給js的對象

TestJSObject *testJO=[TestJSObject new];

context[@"testobject"]=testJO;

//同樣我們也用剛才的方式模擬一下js調用方法

NSString *jsStr1=@"testobject.testNOParameter()";

[context evaluateScript:jsStr1];

NSString *jsStr2=@"testobject.test1Parameter('參數1')";

[context evaluateScript:jsStr2];

NSString *jsStr3=@"testobject.test1Parameter2ndParameter('參數A','參數B')";

[context evaluateScript:jsStr3];

}


注意:刷新 加載更多時 上下文變化 和注入js調用實際

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

推薦閱讀更多精彩內容

  • 跟原生開發相比,H5的開發相對來一個成熟的框架和團隊來講在開發速度和開發效率上有著比原生很大的優勢,至少不用等待審...
    大沖哥閱讀 1,864評論 0 7
  • 隨著H5技術的興起,在iOS開發過程中,難免會遇到原生應用需要和H5頁面交互的問題。其中會涉及方法調用及參數傳值等...
    Chris_js閱讀 3,109評論 1 8
  • 注:JavaScriptCore API也可以用Swift來調用,本文用Objective-C來介紹。 在iOS7...
    JW_T閱讀 562評論 0 0
  • 項目中涉及OC與網頁的交互,查找資料時看到了JavaScriptCore.framework,就對照文章ios7 ...
    YaoYaoX閱讀 2,379評論 7 11
  • 我寫作,是為了創建我需要的住所; 我寫作,是因為寫作的奇妙與滋力遠比我強大; 我寫作,是因為我認為謬誤、墮...
    叔夜君閱讀 507評論 8 9