[jsoc交互]WebViewJavascriptBridge简单实用

news/2024/7/20 22:14:33 标签: javascript, 网络, git, iOS, 交互

javascriptbridge实用流程">WebViewJavascriptBridge实用流程

Git: [https://github.com/tianNanYiHao/WebViewJavascriptBridge.git]
其实WebVIewJavaScriptBridge的使用方法网络上都有,最好还是直接看Git官方给出的流程,这里我把我自己简化的,和理解的写出来,方便自己以后快速查看!
简单列一下WebVIewJavascriptBridge的步骤
1:导入头文件

#import "WebViewJavascriptBridge.h"
@property WebViewJavascriptBridge* bridge;

2:实例化这个_bridge

//开启调试信息
    [WebViewJavascriptBridge enableLogging];

//关联webView
    _bridge = [WebViewJavascriptBridge bridgeForWebView:_webview];

3:(1)在oc中注册 & (2)在js中处理回调
1==>:

  //点击js事件 js向oc通信(触发oc事件)
    [_bridge registerHandler:@"registerHandler" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"datattatatatat=== %@",[NSString stringWithFormat:@"%@",data]);

        UIAlertView *aler = [[UIAlertView alloc]initWithTitle:nil message:@"js调用oc的按钮提示" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];
        aler.tag = 100;

        [aler show];

    }];

2==>

 id data = @{@"信息来源:":@"点击oc事件��,ocjs发送信息并得到js反馈"};
    [_bridge callHandler:@"callHandler" data:data responseCallback:^(id responseData) {
        NSLog(@"   =========  %@",responseData);
        self.lab.text = [NSString stringWithFormat:@"btn2 获得js反馈 %@",responseData];
    }];

4:在js部分做相应的必要处理,具体看下面
主要在js里面 复制这样一段代码以供js去执行

   //必要设置1
            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)
            }

然后,在js的这段代码中,添加上你的js处理

javascript">   //必要设置2
        setupWebViewJavascriptBridge(function(bridge) {
        //里面贴上js的处理代码(js的按钮 js的反馈等等)
}

js部分的代码(全部复制粘贴即可)


<html>
    <body>
        <h2>我的WebVIewJavascriptBridge使用</h2>
        <p>点击下面的按钮,将由js触发oc事件</p>

        <script>javascript">

            //必要设置1
            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)
            }

        //必要设置2
        setupWebViewJavascriptBridge(function(bridge) {

                 //2.1 js回调 (oc向js发送消息后 , js返回信息)
                 bridge.registerHandler('callHandler', function(data, responseCallback) {

                var responseData = { 'Javascript Says':'I am Js, CallBack Now!!!!!' }
                responseCallback(responseData,data)

                })


                 //2.2 js按钮 (js原生按钮,点击后触发oc事件)
                 var callbackButton = document.getElementById('Myjsbuttons').appendChild(document.createElement('button'))
                 callbackButton.innerHTML = 'js按钮==>点击即可调用oc方法'
                 callbackButton.onclick = function(e) {
                 e.preventDefault()
                 bridge.callHandler('registerHandler', {'信息来源:': '我是js,我调用了oc方法(弹出一个UIAlert)'}, function(response) {
                                    })
                 }



                var callbackButton = document.getElementById('MyjsButtons2').appendChild(document.createElement('button'))
                 callbackButton.innerHTML = 'js按钮2 ==>点击即可调用oc方法'
                 callbackButton.onclick = function(){
                 bridge.callHandler('registerHandler2',{'信息来源:':'我是js,我调用了oc方法(修改lab的文字)'},function(response){
                                    })
                 }


            })

        </script>

         <div id='Myjsbuttons'></div>

         <div id='MyjsButtons2'></div>

    </body>
</html>

效果演示

先来看看js 和 oc 的交互效果,部分效果需要在控制台查看,这里就不贴出来了

1.点击oc原生按钮 oc调用js 获得js的回调(反馈信息)

这里写图片描述

2.点击js原生按钮 js调用oc空间,修改oc空间属性

这里写图片描述
这里写图片描述

完整代码

Git传送门=====>>>


http://www.niftyadmin.cn/n/1557746.html

相关文章

css overflow属性及使用方法(场景)

overflow这个属性还是挺实用的比如&#xff0c;一个div展示文字&#xff0c;想让超出部分隐藏就可以使用overflow:hidden,想让显示的画就用overflow:scroll; 1.overflow的属性 值描述visible默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。hidden内容会被修剪&#…

谷歌浏览器下,去掉input输入记录提示框

2019独角兽企业重金招聘Python工程师标准>>> 谷歌浏览器在记住密码后&#xff0c;在input获取焦点的时候就会有输入提示框&#xff0c;如&#xff1a; 有时候我们在输入用户名时&#xff0c;我们自己有ajax的下拉展示列表&#xff0c;那么此时的历史提示输入框就影…

[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable objec

报错!!!!! [__NSCFArray insertObject:atIndex:]: mutating method sent to immutable objec 问题解释 将一个可变的方法 发送给了一个不可变的对象 问题背景 1.在一个UITableview中,使用沙盒存储可变的数据源数组 2.然后退出列表所在的控制器,再返回时从沙盒再读取这个数…

css优先级及加载顺序/权重值以及css继承

一.css的加载方式 CSS的引入样式总共有三种&#xff1a;行内样式&#xff08;内联样式表&#xff09;、内部样式表、外部样式表。下面分别来介绍这三种样式。 1.内联式&#xff08;行内样式&#xff09; 内联式就是直接在标签里写样式。行内样式只对应用了此样式的标签有效&…

exception.ZuulException: Forwarding error

2019独角兽企业重金招聘Python工程师标准>>> 错误日志 com.netflix.zuul.exception.ZuulException: Forwarding error Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: xxx timed-out and no fallback available. Caused by: java.util.concurr…

js es6数组方法find和findIndex的用法(最快捷的找出数组中是否包含某一项)

数组实例的 find() 和 findIndex() 数组实例的find方法&#xff0c;用于找出第一个符合条件的数组成员。它的参数是一个回调函数&#xff0c;所有数组成员依次执行该回调函数&#xff0c;直到找出第一个返回值为true的成员&#xff0c;然后返回该成员。如果没有符合条件的成员…

iOS 7系统 真机调试出现上下黑边

如图 解决办法: 把这三张图片放到这下面,就可以解决 Default2x Default Default-568h2x

[iOS] 限制输入中文的两个办法 ==正则or键盘

正则判断 // ^[\u4e00-\u9fa5]*$ 限制只能输入中文的正则if(![self matchStringFormat:self.accountTextField.text withRegex:"^[\u4e00-\u9fa5]*$"]){[MBProgressHUD showHUDAddedTo:self.view WithString:"请输入中文,不能包含字母或数字"];}#pragma …