欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

JavaScriptCore

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

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

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

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

  1. JS調(diào)用OC
  2. JS調(diào)用OC并傳遞參數(shù)
  3. OC調(diào)用JS
  4. OC調(diào)用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調(diào)用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調(diào)用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];
  });
 }; 
}

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

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

OC調(diào)用JS

初始化兩個(gè)Button,在點(diǎn)擊事件中實(shí)現(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"]];
}

即可實(shí)現(xiàn)OC調(diào)用JS。

demo已上傳,需要的可以點(diǎn)此下載查看。

總結(jié)

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

相關(guān)文章

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

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

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

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

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

    bootstrapValidator自定驗(yàn)證方法寫法

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

    5個(gè)讓你眼前一亮的JavaScript裝飾器技巧

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

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

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

    JS遠(yuǎn)程獲取網(wǎng)頁源代碼實(shí)例

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

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

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

    JavaScript設(shè)計(jì)模式--簡單工廠模式定義與應(yīng)用案例詳解

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

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

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

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

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

最新評論