亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用JavaScriptCore實現(xiàn)OC和JS交互詳解

 更新時間:2017年03月28日 11:34:50   作者:快到碗里來____  
JavaScriptCore是webkit的一個重要組成部分,主要是對JS進行解析和提供執(zhí)行環(huán)境。下面這篇文章主要給大家介紹了使用JavaScriptCore實現(xiàn)OC和JS交互的相關資料,文中介紹的非常詳細,需要的朋友可以參考學習,下面來一起看看吧。

JavaScriptCore

JavaScriptCore是webkit的一個重要組成部分,主要是對JS進行解析和提供執(zhí)行環(huán)境。iOS7后蘋果在iPhone平臺推出,極大的方便了我們對js的操作。

首先創(chuàng)建webView,讀取本地的html文件

 NSURL* htmlURL = [[NSBundle mainBundle] URLForResource: @"demo" withExtension: @"html"];
[_webView loadRequest: [NSURLRequest requestWithURL: htmlURL]];

在demo中,我們要實現(xiàn)4種情況

  1. JS調用OC
  2. JS調用OC并傳遞參數(shù)
  3. OC調用JS
  4. OC調用JS并傳遞參數(shù)

html文件中代碼如下

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <script type="text/javascript">
 function showAlert(){
  alert('OC call JS with no argument');
 }
 function showAlertWithString(string){
  alert(string);
 }
 function callOCWithArgument() {
  jsCallOCWithArgument('參數(shù)1 ','參數(shù)2 ','參數(shù)3');
 }
 </script>
</head>
<body>
 </br>
 </br>
 </br>
 </br>
 <form>
  <button type='button' onclick='callOC()'>jsCallOC</button>
  <button type='button' onclick='callOCWithArgument()'>jsCallOCWithArgument</button>
 </form>
</body>
</html>

JS調用OC

在webView的代理方法webViewDidFinishLoad中

-(void)webViewDidFinishLoad:(UIWebView *)webView
{

 _context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
 __weak typeof(self) weakSelf = self;
 _context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
  weakSelf.context.exception = exception;
 };

 //js調用OC
 _context[@"callOC"] = ^() {
  NSArray *args = [JSContext currentArguments];
  for (JSValue *jsVal in args) {
   NSLog(@"%@", jsVal.toString);
  }
  dispatch_async(dispatch_get_main_queue(), ^{
   UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"arguments" message:@"JS Call OC With No Argument" preferredStyle:UIAlertControllerStyleAlert];
   UIAlertAction * action = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

   }];
   [alertView addAction:action];
   [weakSelf presentViewController:alertView animated:YES completion:nil];
  });
 };

 _context[@"jsCallOCWithArgument"] = ^() {
  NSArray *args = [JSContext currentArguments];
  NSMutableString * stirng = [NSMutableString string];
  for (JSValue * value in args) {
   [stirng appendString:value.toString];
  }
  dispatch_async(dispatch_get_main_queue(), ^{
   UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"arguments" message:stirng preferredStyle:UIAlertControllerStyleAlert];
   UIAlertAction * action = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
   }];
   [alertView addAction:action];
   [weakSelf presentViewController:alertView animated:YES completion:nil];
  });
 }; 
}

我們定義一個block,然后保存到context里面,其實就是轉換成了JS中命名為callOC的function。然后我們直接執(zhí)行這個function,調用的就是我們的block里面的內容了。

傳過來的參數(shù)可以通過[JSContext currentArguments]這個array接受,里面是JSValue對象。

OC調用JS

初始化兩個Button,在點擊事件中實現(xiàn)如下方法

- (IBAction)callJS:(id)sender {
 [_context evaluateScript:@"showAlert()"];
}
- (IBAction)callJSWithArguments:(id)sender {

 [_context evaluateScript:@"showAlertWithString('OC call JS with arguments')"];
// [_context[@"showAlertWithString"] callWithArguments:@[@"OC call JS with arguments"]];
}

即可實現(xiàn)OC調用JS。

demo已上傳,需要的可以點此下載查看。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關文章

  • js微信分享實現(xiàn)代碼

    js微信分享實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了js微信分享的實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • js判斷IE6/IE7/FF的代碼[XMLHttpRequest]

    js判斷IE6/IE7/FF的代碼[XMLHttpRequest]

    js下通過XMLHttpRequest判斷IE6/IE7/FF的代碼,需要的朋友可以參考下。
    2011-02-02
  • bootstrapValidator自定驗證方法寫法

    bootstrapValidator自定驗證方法寫法

    這篇文章主要為大家詳細介紹了bootstrapValidator自定驗證方法寫法,研究bootstrapValidator驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 5個讓你眼前一亮的JavaScript裝飾器技巧

    5個讓你眼前一亮的JavaScript裝飾器技巧

    JavaScript?裝飾器是一種特殊的功能,允許在不修改源代碼的情況下動態(tài)修改類和函數(shù)的行為,本文將介紹五個讓你眼前一亮的裝飾器技巧,包括裝飾函數(shù)參數(shù)、裝飾類屬性、裝飾函數(shù)返回值和裝飾函數(shù)調用,需要的朋友可以參考下
    2023-06-06
  • JavaScript中l(wèi)et與const命令使用

    JavaScript中l(wèi)et與const命令使用

    本文主要介紹了JavaScript中l(wèi)et與const命令使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • JS遠程獲取網頁源代碼實例

    JS遠程獲取網頁源代碼實例

    獲取網頁源代碼的方法有很多,本文為大家介紹下使用JS是如何做到的,感興趣的朋友可以學習下哦
    2013-09-09
  • JavaScript創(chuàng)建一個歡迎cookie彈出窗實現(xiàn)代碼

    JavaScript創(chuàng)建一個歡迎cookie彈出窗實現(xiàn)代碼

    歡迎cookie想必大家早有耳聞,利用cookie記錄用戶狀態(tài)信息,當用戶再次訪問的時候彈出歡迎框,個人感覺還不錯吧,希望對你學習cookie有所幫助
    2013-03-03
  • JavaScript設計模式--簡單工廠模式定義與應用案例詳解

    JavaScript設計模式--簡單工廠模式定義與應用案例詳解

    這篇文章主要介紹了JavaScript設計模式--簡單工廠模式定義與應用,結合具體案例形式詳細分析了JavaScript設計模式中簡單工廠模式基本概念、定義、用法與相關注意事項,需要的朋友可以參考下
    2020-05-05
  • Autocomplete Textbox Example javascript實現(xiàn)自動完成成功

    Autocomplete Textbox Example javascript實現(xiàn)自動完成成功

    Autocomplete Textbox Example javascript實現(xiàn)自動完成成功...
    2007-08-08
  • javascript實現(xiàn)英文首字母大寫

    javascript實現(xiàn)英文首字母大寫

    本文給大家總結了幾種可以實現(xiàn)英文首字母大寫的javascript腳本,另附上一個CSS的實現(xiàn)方法,非常的簡單實用,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-04-04

最新評論