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

IOS中UIWebView、WKWebView之JS交互

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

做客戶端開發(fā),肯定避免不了JS交互,于是自己對蘋果接口做了個簡易封裝:

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

代碼非常簡潔,見這里:https://github.com/V5zhou/JSInteraction.git

舊方式

舊的交互方式有通過UIWebViewDelegate實現(xiàn)的:JS與客戶端定義好跳轉(zhuǎn)頁面參數(shù),在將要跳轉(zhuǎn)時捕獲關(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方式

導入JavaScriptCore.framework,并導入我的擴展類#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;
    }
  }];
}

添加動作

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

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

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

其中callBack是通過這個JSExport實現(xiàn)的

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

WKWebView+WKScriptMessageHandler方式

導入WebKit.framework,并導入我的擴展類#import "WKWebView+Interaction.h"。

使用方式

OC調(diào)JS:

[self.wkWebView InterActionToJs:@"JSReloadTitle('你點了刷新JS按鈕,我沒猜錯!')"];

JS調(diào)OC:

//注冊交互類型
  [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;
    }
  }];

添加動作

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

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

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

其中callBack是通過WKScriptMessageHandler實現(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);
    }
  });
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS實現(xiàn)動態(tài)的開屏廣告示例代碼

    iOS實現(xiàn)動態(tài)的開屏廣告示例代碼

    啟動圖是在iOS開發(fā)過程中必不可少的一個部分,很多app在啟動圖之后會有一張自定義的開屏廣告圖,但是有的時候需要讓啟動圖看起來就是一個廣告,而且還要這個廣告里面會動,iOS的啟動圖只能是靜態(tài)的,而且固定,為了實現(xiàn)看起來的動畫效果,只能進行偽造了。下面來一起看看
    2016-09-09
  • 詳解關(guān)于iOS內(nèi)存管理的規(guī)則思考

    詳解關(guān)于iOS內(nèi)存管理的規(guī)則思考

    本篇文章主要介紹了關(guān)于iOS內(nèi)存管理的規(guī)則思考,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • ios基礎(chǔ)教程之常見的數(shù)組使用方法

    ios基礎(chǔ)教程之常見的數(shù)組使用方法

    這篇文章主要給大家介紹了關(guān)于ios基礎(chǔ)教程之常見的數(shù)組使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • iOS CoreData 增刪改查詳解

    iOS CoreData 增刪改查詳解

    這篇文章主要為大家詳細介紹了iOS CoreData 增刪改查的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS 11 下適配UITableView 問題

    iOS 11 下適配UITableView 問題

    這篇文章主要介紹了iOS 11 下適配UITableView 問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-09-09
  • iOS仿微信搖一搖功能

    iOS仿微信搖一搖功能

    這篇文章主要為大家詳細介紹了iOS仿微信搖一搖功能的實現(xiàn)方法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS App使用GCD導致的卡頓現(xiàn)象及解決方法

    iOS App使用GCD導致的卡頓現(xiàn)象及解決方法

    這篇文章主要給大家介紹了關(guān)于iOS App使用GCD導致的卡頓現(xiàn)象及解決方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • 禁止iPhone Safari video標簽視頻自動全屏的辦法

    禁止iPhone Safari video標簽視頻自動全屏的辦法

    本篇文章給大家分析有沒有辦法禁止iPhone Safari video標簽視頻自動全屏,以下給出好多種情況分享,感興趣的朋友可以參考下
    2015-09-09
  • iOS tabview如何添加字母索引

    iOS tabview如何添加字母索引

    這篇文章主要為大家詳細介紹了iOS tabview如何添加字母索引,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • IOS 數(shù)據(jù)存儲詳解及實例代碼

    IOS 數(shù)據(jù)存儲詳解及實例代碼

    這篇文章主要介紹了IOS 數(shù)據(jù)存儲詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

调兵山市| 蓝田县| 博乐市| 新巴尔虎左旗| 融水| 友谊县| 锦州市| 姚安县| 长岭县| 蒙城县| 通渭县| 华容县| 简阳市| 分宜县| 新竹县| 林甸县| 穆棱市| 外汇| 乌什县| 泗洪县| 沂南县| 丰顺县| 开江县| 南澳县| 万载县| 阜新市| 松潘县| 吴桥县| 太和县| 潮州市| 多伦县| 蒲江县| 南投县| 石家庄市| 枝江市| 福建省| 称多县| 丰镇市| 竹溪县| 湘潭市| 高密市|