最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用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調(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];
  });
 }; 
}

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

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

OC調(diào)用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調(diào)用JS。

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

總結(jié)

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

相關文章

  • 實例講解JavaScript截取字符串

    實例講解JavaScript截取字符串

    在本文中小編通過實例給大家分享了JavaScript中如何截取字符串的方法,需要的朋友們參考一下。
    2018-11-11
  • js遮罩效果制作彈出注冊界面效果

    js遮罩效果制作彈出注冊界面效果

    這篇文章主要為大家詳細介紹了js遮罩效果制作彈出注冊界面效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JS中去掉if...else的多種方法

    JS中去掉if...else的多種方法

    在JavaScript編程中,過多的if...elseif...else語句可能導致代碼難以維護,可以通過switch語句、對象字面量、函數(shù)映射、數(shù)組或映射對象分發(fā)、提前返回以及使用數(shù)組的find方法來優(yōu)化這種復雜的條件判斷,提高代碼的可讀性和維護性,下面就來介紹一下
    2024-09-09
  • 基于JavaScript實現(xiàn)屏幕滾動效果

    基于JavaScript實現(xiàn)屏幕滾動效果

    這篇文章主要為大家詳細介紹了基于JavaScript實現(xiàn)屏幕滾動效果的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 使用JS實現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能

    使用JS實現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能

    這篇文章主要介紹了使用JS實現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能,需要的朋友可以參考下
    2014-10-10
  • 關于javascript 回調(diào)函數(shù)中變量作用域的討論

    關于javascript 回調(diào)函數(shù)中變量作用域的討論

    關于回調(diào)函數(shù)中變量作用域的討論精品推薦,大家可以參考下。
    2009-09-09
  • 一文詳解uniapp中如何使用easycom自定義組件

    一文詳解uniapp中如何使用easycom自定義組件

    easycom是uniapp的一種組件自動引入的規(guī)則,使用這種規(guī)則可以使?jié)M足規(guī)則的組件無需注冊直接使用,下面這篇文章主要給大家介紹了關于uniapp中如何使用easycom自定義組件的相關資料,需要的朋友可以參考下
    2023-05-05
  • 如何寫好你的JavaScript【推薦】

    如何寫好你的JavaScript【推薦】

    在實際工作中,我們應該經(jīng)常會看到一些功能上沒有問題,但編碼風格和規(guī)范卻十分糟糕的代碼,這往往會讓人不敢再往下閱讀,甚至會影響閱讀者一天的心情。本文的目的在于幫助那些沒有養(yǎng)成良好的編碼風格,缺乏相應編碼規(guī)范意識的JavaScript學習者們改善他們的編碼形象。
    2017-03-03
  • js獲取form的方法

    js獲取form的方法

    這篇文章主要介紹了js獲取form的方法,實例分析了javascript操作form表單的技巧,需要的朋友可以參考下
    2015-05-05
  • 前端開發(fā)基礎javaScript的六大作用

    前端開發(fā)基礎javaScript的六大作用

    這篇文章主要介紹了前端開發(fā)基礎javaScript的六大作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

平乐县| 麻城市| 平果县| 贺州市| 文安县| 中山市| 大石桥市| 嘉义县| 望谟县| 鹿泉市| 巴林右旗| 肇庆市| 连云港市| 汕尾市| 商城县| 高要市| 诸暨市| 辽中县| 山东| 贞丰县| 安徽省| 塔河县| 车险| 修文县| 江西省| 柯坪县| 苏尼特左旗| 璧山县| 茶陵县| 静海县| 兰考县| 姚安县| 当涂县| 广灵县| 绍兴市| 滁州市| 卢氏县| 涪陵区| 美姑县| 易门县| 马边|