zoukankan      html  css  js  c++  java
  • WebViewJavascriptBridge的使用说明

    WebViewJavascriptBridge 项目介绍

    在Obj-C 和 WKWebView, UIWebView 中的 Javascript之间传送信息的桥梁。

    项目地址

    如何使用

    Javascript的介绍

        <script>
            window.onerror = function(err) {
                    log('window.onerror: ' + err)
                }
                //下面的方法是必备
            function setupWebViewJavascriptBridge(callback) {
                if (window.WebViewJavascriptBridge) {
                    return callback(WebViewJavascriptBridge);
                }
                if (window.WVJBCallbacks) {
                    return window.WVJBCallbacks.push(callback);
                }
                window.WVJBCallbacks = [callback];
                var WVJBIframe = document.createElement('iframe');
                WVJBIframe.style.display = 'none';
                WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
                document.documentElement.appendChild(WVJBIframe);
                setTimeout(function() {
                    document.documentElement.removeChild(WVJBIframe)
                }, 0)
            }
            setupWebViewJavascriptBridge(function(bridge) {
                var uniqueId = 1;
                //打印方法
                function log(message, data) {
                    var log = document.getElementById('log')
                    var el = document.createElement('div')
                    el.className = 'logLine'
                    el.innerHTML = uniqueId++ + '. ' + message + ':<br/>' + JSON.stringify(data)
                    if (log.children.length) {
                        log.insertBefore(el, log.children[0])
                    } else {
                        log.appendChild(el)
                    }
                }
                //JS 注册处理,名字需与 ObjC 一致
                bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
                    log('ObjC called testJavascriptHandler with', data)
                    var responseData = {
                        'Javascript Says': 'Right back atcha!'
                    }
                    log('JS responding with', responseData)
                    responseCallback(responseData)
                })
    
                document.body.appendChild(document.createElement('br'))
    
                var callbackButton = document.getElementById('buttons').appendChild(document.createElement('button'))
                callbackButton.innerHTML = 'Fire testObjcCallback'
                callbackButton.onclick = function(e) { // 点击按钮事件
                    e.preventDefault();
                    log('JS calling handler "testObjcCallback"');
                    // JS 向 ObjC 传数据的方式,callHandler(方法标识符, 数据, 回调)
                    bridge.callHandler('testObjcCallback', {
                        'foo': 'bar'
                    }, function(response) {
                        log('JS got response', response);
                    })
                }
            })
        </script>
    
    

    ObjC 中的使用介绍

    引入头文件

    #import "WebViewJavascriptBridge.h"
    
    

    声明变量

    @property WebViewJavascriptBridge* bridge;
    

    实现方法

    if (_bridge) { return; }
        
        
        UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:webView];
        
        [WebViewJavascriptBridge enableLogging];
        
        _bridge = [WebViewJavascriptBridge bridgeForWebView:webView];
        [_bridge setWebViewDelegate:self];
        
        [_bridge callHandler:@"testJavascriptHandler" data:@{@"foo":@"before ready"}];
        
        
        [_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
            NSLog(@"testObjcCallback called: %@", data);
            NSString *strDD = [NSString stringWithFormat:@"hello world: %@",data];
            responseCallback(strDD);
        }];
    
    
  • 相关阅读:
    SQL server中自定义排序
    安装nodejs版本模块报错notsup Unsupported platform for n
    vue项目中一些标签直接放在<template>下会报错Failed to compile with 1 errors
    vue中使用element-ui出现Couldn't find preset "es2015" relative to directory
    解决两个相邻的span,或者input和button中间有间隙,在css中还看不到
    VsCode中代码折叠快捷键
    npm 操作代码
    vue项目打包成html,在本地点击直接能打开
    地图只显示部分区域,其他地区不显示
    vs里颜色显示块怎样显示
  • 原文地址:https://www.cnblogs.com/dm521/p/7048602.html
Copyright © 2011-2022 走看看