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

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

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

JavaScriptCore

JavaScriptCore是webkit的一個(gè)重要組成部分,主要是對(duì)JS進(jìn)行解析和提供執(zhí)行環(huán)境。iOS7后蘋(píng)果在iPhone平臺(tái)推出,極大的方便了我們對(duì)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)容了。

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

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é)

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

相關(guān)文章

  • 實(shí)例講解JavaScript截取字符串

    實(shí)例講解JavaScript截取字符串

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

    js遮罩效果制作彈出注冊(cè)界面效果

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

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

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

    基于JavaScript實(shí)現(xiàn)屏幕滾動(dòng)效果

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

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

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

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

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

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

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

    如何寫(xiě)好你的JavaScript【推薦】

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

    js獲取form的方法

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

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

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

最新評(píng)論

昭苏县| 西城区| 扶风县| 汤原县| 新丰县| 临武县| 光山县| 山东省| 石嘴山市| 西充县| 安岳县| 广州市| 陆丰市| 政和县| 襄垣县| 广河县| 车险| 九寨沟县| 江永县| 辽阳市| 八宿县| 尉氏县| 体育| 开远市| 金寨县| 两当县| 遂溪县| 阳原县| 许昌县| 弥勒县| 邮箱| 驻马店市| 桓仁| 达州市| 皮山县| 安泽县| 济阳县| 砚山县| 宁陕县| 东丽区| 扎赉特旗|