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

IOS中UIWebView、WKWebView之JS交互

 更新時(shí)間:2017年06月13日 09:31:02   作者:小小棒棒糖  
本篇文章主要介紹了IOS中UIWebView、WKWebView之JS交互,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

做客戶端開(kāi)發(fā),肯定避免不了JS交互,于是自己對(duì)蘋(píng)果接口做了個(gè)簡(jiǎn)易封裝:

JSExport-->UIWebView+Interaction、WKScriptMessageHandler -->WKWebView+Interaction以備以后使用。

代碼非常簡(jiǎn)潔,見(jiàn)這里:https://github.com/V5zhou/JSInteraction.git

舊方式

舊的交互方式有通過(guò)UIWebViewDelegate實(shí)現(xiàn)的:JS與客戶端定義好跳轉(zhuǎn)頁(yè)面參數(shù),在將要跳轉(zhuǎn)時(shí)捕獲關(guān)鍵字,然后處理業(yè)務(wù)。

iOS端:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
  NSString *urlString = [[request URL] absoluteString];
  if ([urlString isEqualToString:@"objc://loading"]) {
    if (_gotoRootViewController) {
      _gotoRootViewController();
    }
  }
  return YES;
}

JS端:

<!DOCTYPE html>
<html>
  <title>test</title>
  <meta charset="utf-8">
    <body>
      <a href="javascript:document.location = 'objc://loading'" rel="external nofollow" class="btn">這是交互按鈕</a>
    </body>
</html>

UIWebView+JSExport方式

導(dǎo)入JavaScriptCore.framework,并導(dǎo)入我的擴(kuò)展類#import "UIWebView+Interaction.h"。

使用方式

OC調(diào)JS:

[_webView InterActionToJs:@"alertMobile('15625298071')"];

JS調(diào)OC:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  [self.webView InterActionToOc:^(InterActionOcType functionType, NSDictionary *param) {
    switch (functionType) {
      case InterActionOcType_alert:
      {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:param[@"title"] message:param[@"content"] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"確定", nil];
        [alert show];
      }
        break;
      case InterActionOcType_present:
      {
        self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        Class Cls = NSClassFromString(param[@"toController"]);
        BOOL isAnimate = [param[@"animate"] boolValue];
        UIViewController *ctl = [[Cls alloc] init];
        [self presentViewController:ctl animated:isAnimate completion:nil];
      }
        break;

      default:
        break;
    }
  }];
}

添加動(dòng)作

//自定義添加功能類型
typedef NS_ENUM(NSUInteger, InterActionOcType) {
  InterActionOcType_alert = 0,
  InterActionOcType_present,
  InterActionOcType_xxxxxxx,   //有啥需求就和這里添加
};

并且對(duì)應(yīng)的html中添加JS,參數(shù)封裝為字典形式。例:

function myPresent(ctl) {
      var param = new Array();
      param["animate"] = 1;
      param["toController"] = "SecondViewController";
      WebViewInteraction.callBack(1, param);
    }

其中callBack是通過(guò)這個(gè)JSExport實(shí)現(xiàn)的

@protocol WebViewJSExport <JSExport>
JSExportAs
(callBack /** callBack 作為js方法的別名 */,
 - (void)awakeOC:(InterActionOcType)type param:(NSDictionary *)param
 );
@end

WKWebView+WKScriptMessageHandler方式

導(dǎo)入WebKit.framework,并導(dǎo)入我的擴(kuò)展類#import "WKWebView+Interaction.h"。

使用方式

OC調(diào)JS:

[self.wkWebView InterActionToJs:@"JSReloadTitle('你點(diǎn)了刷新JS按鈕,我沒(méi)猜錯(cuò)!')"];

JS調(diào)OC:

//注冊(cè)交互類型
  [self.wkWebView registerScriptTypes:@{@"OCDismiss" : @(WKInterActionOcType_dismiss),
                     @"OCShowAlert" : @(WKInterActionOcType_alert)}];

  [self.wkWebView InterActionToOc:^(WKInterActionOcType functionType, NSDictionary *param) {
    switch (functionType) {
      case WKInterActionOcType_dismiss:
      {
        BOOL isAnimate = [param[@"animate"] boolValue];
        [self dismissViewControllerAnimated:isAnimate completion:nil];
      }
        break;
      case WKInterActionOcType_alert:
      {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"JS去做平方" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
        alert.alertViewStyle = UIAlertViewStylePlainTextInput;
        [alert show];
      }
        break;
      default:
        break;
    }
  }];

添加動(dòng)作

//自定義添加功能類型
typedef NS_ENUM(NSUInteger, WKInterActionOcType) {
  WKInterActionOcType_alert = 0,
  WKInterActionOcType_dismiss,
  WKInterActionOcType_xxxxxxx,   //有啥需求就和這里添加
};

并且對(duì)應(yīng)的html中添加JS,參數(shù)封裝為字典形式。例:

//js調(diào)oc
function myDismiss() {
  window.webkit.messageHandlers.OCDismiss.postMessage({"animate" : 1});  //這里的OCDismiss對(duì)應(yīng)注冊(cè)類型
}

其中callBack是通過(guò)WKScriptMessageHandler實(shí)現(xiàn)的

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
  dispatch_async(dispatch_get_main_queue(), ^{
    NSString *name = message.name;
    NSDictionary *value = message.body;
    WKInterActionOcType type = [self.typeDict[name] integerValue];
    if (self.block) {
      self.block(type, value);
    }
  });
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS tableView實(shí)現(xiàn)頭部拉伸并改變導(dǎo)航條漸變色

    iOS tableView實(shí)現(xiàn)頭部拉伸并改變導(dǎo)航條漸變色

    這篇文章主要為大家詳細(xì)介紹了iOS tableView實(shí)現(xiàn)頭部拉伸并改變導(dǎo)航條漸變色,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS ScrollView嵌套tableView聯(lián)動(dòng)滾動(dòng)的思路與最佳實(shí)踐

    iOS ScrollView嵌套tableView聯(lián)動(dòng)滾動(dòng)的思路與最佳實(shí)踐

    這篇文章主要給大家介紹了關(guān)于ScrollView嵌套tableView聯(lián)動(dòng)滾動(dòng)的思路與最佳實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • NSString屬性何時(shí)用strong何時(shí)用copy?

    NSString屬性何時(shí)用strong何時(shí)用copy?

    相信各位iOS開(kāi)發(fā)者們都考慮過(guò)這個(gè)問(wèn)題,平時(shí)寫(xiě)NSString的屬性時(shí)都用copy,那strong要何時(shí)用呢?下面這篇文章就來(lái)看一下什么時(shí)候應(yīng)該用copy,什么時(shí)候應(yīng)該用strong。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • iOS模仿電子書(shū)首頁(yè)實(shí)現(xiàn)書(shū)架布局樣式

    iOS模仿電子書(shū)首頁(yè)實(shí)現(xiàn)書(shū)架布局樣式

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)類似電子書(shū)首頁(yè)效果樣式,實(shí)現(xiàn)書(shū)架布局樣式,感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS微信分享后關(guān)閉發(fā)送成功提示并返回應(yīng)用

    iOS微信分享后關(guān)閉發(fā)送成功提示并返回應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了iOS微信分享后關(guān)閉發(fā)送成功提示并返回應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • IOS 解決UIButton 點(diǎn)擊卡頓/延遲的問(wèn)題

    IOS 解決UIButton 點(diǎn)擊卡頓/延遲的問(wèn)題

    本文主要介紹 IOS UIButton, 這里給大家提供代碼實(shí)例作為參考,解決 UIButton 點(diǎn)擊卡頓或者延遲問(wèn)題,在開(kāi)發(fā) IOS 項(xiàng)目的小伙伴如果遇到這樣的問(wèn)題可以參考下
    2016-07-07
  • IOS 聊天界面(自適應(yīng)文字)的實(shí)現(xiàn)

    IOS 聊天界面(自適應(yīng)文字)的實(shí)現(xiàn)

    本文主要介紹一個(gè)實(shí)現(xiàn)聊天界面的思路過(guò)程,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • iOS中視頻播放器的簡(jiǎn)單封裝詳解

    iOS中視頻播放器的簡(jiǎn)單封裝詳解

    要實(shí)現(xiàn)封裝視頻播放器,首先需要實(shí)現(xiàn)視頻播放器,然后再去考慮怎樣封裝可以讓以后自己使用起來(lái)方便快捷。iOS9之前可以使用MediaPlayer來(lái)進(jìn)行視頻的播放,iOS9之后系統(tǒng)推薦使用AVFoundation框架實(shí)現(xiàn)視頻的播放。下面通過(guò)本文來(lái)看看詳細(xì)的介紹吧。
    2016-10-10
  • iOS app 右滑返回操作的兩種方法

    iOS app 右滑返回操作的兩種方法

    這篇文章主要介紹了iOS app 右滑返回操作的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • iOS中UIScrollView嵌套UITableView的實(shí)踐教程

    iOS中UIScrollView嵌套UITableView的實(shí)踐教程

    在UIScrollView嵌套UITableView的問(wèn)題相信大家都遇到過(guò),小編最近在工作中就遇到了這個(gè)問(wèn)題,所以這篇文章主要介紹了iOS中UIScrollView嵌套UITableView的相關(guān)資料,文中介紹的方法是通過(guò)自己的實(shí)踐所得來(lái)的,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-05-05

最新評(píng)論