ios 与 html 5 交互 的实现

来源:互联网 发布:杰森斯坦森 知乎 编辑:程序博客网 时间:2024/05/01 06:58

ios 与 html 5 交互 的实现

一:最近 html 5  越来越火,不仅是因为html 5 效果极佳,更重要的是现在大多数移动端都支持html 5,那么有些公司为了节约成本,就用html5,而它们的交互,则就要做了

二:这里我用WebViewJavascriptBridge 来作为中间层,实现起来也很简单,上图

1. IOS端的实现:

2. js实现


代码:js

function connectWebViewJavascriptBridge(callback) {

    if (window.WebViewJavascriptBridge) {

        callback(WebViewJavascriptBridge)

    } else {

        document.addEventListener('WebViewJavascriptBridgeReady', function() {

        callback(WebViewJavascriptBridge)}, false)

    }

}


var app = {

    setImageList:function(wgImageList) {

        connectWebViewJavascriptBridge(function(bridge) {

            bridge.callHandler('setImageList', wgImageList, function(response) {})

        });},

    showImage:function(url) {

        connectWebViewJavascriptBridge(function(bridge) {

            bridge.callHandler('showImage', url, function(response) {})

        });},

    version:function(){

        return 2;

    }

}


function getContentHeight()

{

    return document.getElementById("content").offsetHeight;

}


function setHtmlFontSize(size) {

    document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust = size + "%";

    $(window).resize();

    return getContentHeight();

}


initApp();


oc :

#define INVOKEJSOCBRIDGE_FILE_NAME @"JsInvokeOCBridge.js.txt"

#import "InvokeJsOCBridge.h"

#import "WebViewJavascriptBridge.h"

@interface InvokeJsOCBridge ()

/*** oc js 交互桥梁(通道) ***/

@property (strong, nonatomic) WebViewJavascriptBridge *wbJSBridge;

@end

@implementation InvokeJsOCBridge

#pragma mark - 注入js

+ (void)registerJS:(UIWebView *)webview {

    NSString *filePath = [[NSBundlemainBundle] pathForResource:INVOKEJSOCBRIDGE_FILE_NAMEofType:nil];

    NSString *js = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:nil];

    [webview stringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"%@",js]];

}

#pragma mark - 初始化

- (instancetype)initWithParentVC:(DetailViewController *)parentVC{

    if(self = [superinit])

    {

        // *** 初始化交互桥梁(通道)

        self.wbJSBridge = [WebViewJavascriptBridgebridgeForWebView:parentVC.webViewwebViewDelegate:parentVC.webView handler:^(id data, WVJBResponseCallback responseCallback) {}resourceBundle:nil];

        // *** 注入js

        [InvokeJsOCBridge registerJS:parentVC.webView];

        // * js 回调 oc操作

        [self registerInvoker:parentVC];

    }

    return self;

}

#pragma mark - 链接jsoc交互方法

- (void)registerInvoker:(id<InvokeJsOcBridgeDelegate>) invoker{

    // *** 注册 setImageList(wgImageList) ->获取图片列表信息

    [self.wbJSBridgeregisterHandler:@"setImageList" handler:^(id data, WVJBResponseCallback responseCallback) {

//        NSLog(@"data = %@", data);

        [invoker setImageList:data];

    }];

    

    // *** 注册 showImage ->获取图册信息

    [self.wbJSBridgeregisterHandler:@"showImage" handler:^(id data, WVJBResponseCallback responseCallback) {

        [invoker showImage:data];

    }];

    

//    // *** 注册 setTocList -> 获取目录列表信息

//    [self.wbJSBridge registerHandler:@"setTocList" handler:^(id data, WVJBResponseCallback responseCallback) {

//        NSLog(@"data = %@", data);

////        [invoker setTocList:data];

//    }];

//    

//    // *** 注册 showToc -获取单个目录信息

//    [self.wbJSBridge registerHandler:@"showToc" handler:^(id data, WVJBResponseCallback responseCallback) {

//        NSLog(@"data = %@", data);

////        [invoker showToc:data];

//    }];

//    

//    // *** 注册 setCurrentHeadLine

//    [self.wbJSBridge registerHandler:@"setCurrentHeadLine" handler:^(id data, WVJBResponseCallback responseCallback) {

//        NSLog(@"data = %@", data);

////        [invoker setCurrentHeadLine:data];

//    }];

//    

//    // *** 注册 setPageInfo

//    [self.wbJSBridge registerHandler:@"setPageInfo" handler:^(id data, WVJBResponseCallback responseCallback) {

//        NSLog(@"data = %@", data);

////        [invoker setPageInfo:data];

//    }];

}


#pragma mark - 设置网页字体大小

+ (float)setHtmlFontSize:(UIWebView *)webview textSize:(NSInteger)textSize;

{

    if(WF_DEVICE_IPad)

    {

        textSize += 20;

    }

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        

    });

    return [[webviewstringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"setHtmlFontSize('%d')", (int)textSize]]floatValue];

}

 

0 0
原创粉丝点击