iOS UIWebView中Objective-C與Javascript的深層交互(三)

       上篇文章中講述瞭如何通過代碼直接用JavaScript調用Objective-C方法,本文通過另一種思路實現,即通過稍微複雜的一種方法,即通過一個對象來調用方法,該方法通過實現一個協議來操作,即JSExport協議

       JSEXport,凡是添加了JSEXPort協議的協議,所規定的方法,變量等,就會對JS開放,我們都可以通過JS的類調用到。

比如:JS方法爲account.account('參數'),我們在OC中添加的代理方法爲:-(void)account:(nsstring *)account;

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

例如: js方法爲 :testobject.TestTowParameterSecondParameter('參數A','參數B') 
他有兩個參數 那麼我們的代理方法 就是把js的方法名 TestTowParameterSecondParameter 任意拆分成兩段作爲代理方法名(此處我們拆分爲 TestTowParameter 和 SecondParameter ) 那麼我們的代理方法就是

-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2; 
我們看代理方法有兩個變量別名
TestTowParameter 和 SecondParameter
他兩個拼接起來就剛好是我們js的方法名,這部分是參考別人博客看的功能,沒有實際操作,讀者若有需要,可以自己嘗試下。


下邊詳細講述下操作

1:首先創建一個類,繼承與NSObject,規定一個協議,在該類中導入頭文件#import <JavaScriptCore/JavaScriptCore.h>  

    1.1:創建協議 
    #import <JavaScriptCore/JavaScriptCore.h> 
  / /首先創建一個實現了JSExport協議的協議  
   @protocol JSObjectProtocol <JSExport>  
 
  //此處我們測試幾種參數的情況  
  -(void)JSNOParamr;  
  -(void)JSOneParameter:(NSString *)message;  
  -(void)JSTwoParameter:(NSString *)message1 SecondParameter:(NSString *)message2;  

 
@end  
 

//讓我們創建的類實現上邊的協議  
@interface TestJSObject : NSObject<JSObjectProtocol>  
 
@end 

.m文件爲對應的實現

2:具體的調用

還是和之前的一樣,首先創建JSContext對象:   

JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
js是通過對象調用的,我們假設js裏面有一個對象 jsCallOC在調用方法  
  首先創建我們新建類的對象,將他賦值給js的對象 
JSObjectProtocol * ocJs = [[JSObjectProtocol alloc]init];

context[@"jsCallOC"] = ocJS//該處代碼將我們自己實現了協議的類的對象賦值給js的類,讓js的類通過方法調用,

這個時候可以執行js的代碼了,js中的對象名字要和該名稱相同,不然沒法調用,這個時候在oc的類中打斷點,會發現掉用來該方法,如是,則實現了另外一種JavaScript調用Objective-C的方法

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章