js 与 ios Android交互

一.android 交互

1.js调用webview

在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个注解:@JavascriptInterface,这个注解需要导入一个包:import android.webkit.JavascriptInterface;

public void onCreate(Bundle savedInstanceState) {
    //给js设置调用的方法
    this.appView.addJavascriptInterface(new JavaScripdtObject(), "android");//这个android是注入对象
}
/**
* 供js调用的对象方法
* */
public class JavaScripdtObject {

    @JavascriptInterface//加入这个注解
    public void runAndroidMethod(String str) {
        Toast.makeText(MainActivity.this, "被js调用"+str, Toast.LENGTH_SHORT).show();
    }
}

js 代码

<script>
    window.android.runAndroidMethod(str);
</script>

2. android调用 js 这个简单

this.appView.getSettings().setJavaScriptEnabled(true);
this.appView.loadUrl("javascript:view.test()");

二. js 调用ios

- (void)addShowTypeView:(NSString *)nibName{

    UIApplication *app = [UIApplication sharedApplication];
    AppDelegate *delegeat = app.delegate;
    self.creativeView = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil][0];
    __weak __typeof__(self)self_weak = self;

    //返回
    self.creativeView.backBtnBlock = ^(UIView *sideView){
        [self_weak backBtnClickMainView:self_weak.webView View:sideView];
    };
    self.creativeView.frame = CGRectMake(kScreenWidth, 0, kScreenWidth/2, kScreenHeight);
    [delegeat.window addSubview:_creativeView];
    [self TranslationViewAnimationMainView:self.webView rightView:self.creativeView];
}

#pragma mark - UIWebView代理
/**
 *  网页的JS动态调用OC的方法!!!
 */
// 此代理方法与加载页面有关系
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    NSString *urlString = [[request URL] absoluteString];
    DLog(@"url = %@",urlString);

    NSArray *urlComps = [urlString componentsSeparatedByString:@"://"];
    if([urlComps count] && [[urlComps objectAtIndex:0] isEqualToString:@"objc"])

    {
        if (urlComps.count > 1) {

            if ([urlComps[1] hasPrefix:@"showTypeView"]) {

                NSArray *arr = [urlComps[1] componentsSeparatedByString:@"&"];
                if (arr.count > 0) {
                    SEL sel = NSSelectorFromString(arr[0]);
                    if ([self respondsToSelector:sel]) {
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks"
                        [self performSelector:sel withObject:((arr.count>1)?arr[1]:nil)];
# pragma clang diagnostic pop

                    }
            }

            }
            else if ([urlComps[1] hasPrefix:@"showshareView"]) {
                NSArray *arr = [urlComps[1] componentsSeparatedByString:@"&"];
                if (arr.count > 0) {
                    SEL sel = NSSelectorFromString(arr[0]);
                    if ([self respondsToSelector:sel]) {
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks"
                        [self performSelector:sel withObject:((arr.count>1)?arr[1]:nil)];
# pragma clang diagnostic pop

                    }
                }

            }
        }
    }

    return YES;
}

js 代码

document.location="objc://showTypeView:&1";
时间: 2024-08-27 14:36:05

js 与 ios Android交互的相关文章

Ios开发之 -- js和ios的交互

==WebViewJavascriptBridge的介绍== #下载:https://github.com/marcuswestin/WebViewJavascriptBridge #关于WebViewJavascriptBridge的介绍:http://blog.csdn.net/yanghua_kobe/article/details/8209751 ==WebViewJavascriptBridge(在与现有的业务代码结合使用中)的小问题== *demo部分(  ExampleApp.ht

JS与IOS、Android的交互

一.JS与Android 放在了assets文件夹下了(注意若使用的是AS这个IDE,assets文件夹应放在src/main目录下) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>葛夫锋</title> <script> function callAndroid(){ test.hello("js调用了android中

[掌眼]iOS / Android / java / node.js 通用的 AES256 加解密算法

example.m NSString *text = @"text"; NSString *key32 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding]; NSString *encryptedData = [[data AES256EncryptWithKey:key32] base64EncodedStringWi

【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解React Native与iOS之间的通信交互. 本篇主要分为两部分讲解:(关于其中讲解的OC语法等不介绍,不懂的请自行学习) 1. React Native 访问iOS 2. iOS访问React Native     一:React Native 访问iOS 1. 我们想要JS调用OC函数,就要实现一个"RCTBridgeModule"协议的Objective-C类 所以首先我们先创建一个oc新类,  

Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与java互相调用的需求.它就是WebViewJavascriptBridge. 学习动机: 先看下之前的解决办法:Android混合开发之WebView与Javascript交互 最近棒棒安全的一个市场推广来我们公司推广他们的产品,当时也没太引起我的注意,后来这个市场推广人员把我们的app的进行了他们

js与ios交互,js示例

js与ios交互,js示例 js文件:coco3gNativeUser.js let c3_navtive_user = {}; (function(owner) { owner.temp = {}; //右上角按钮及事件 owner.__defineSetter__('right_button_item',function(item){ this._right_button_item = item; }); owner.__defineGetter__('right_button_item',

用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.android实现自绘日期选择控件 目的: 通过一个相对复杂的自定义自绘控件来分享: 1.ios以及android自定义自绘控件的开发流程 2.objc与c/c++混合编程 3.android ndk的环境配置,android studio ndk的编译模式,swig在android ndk开发中的作

移动端热更新方案(iOS+Android)

PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5%88%86%E4%BA%ABPPT.pptx 一 .热更新(热修复)产品背景 这里谈到的热更新都是指APP(不包含网页).APP按大类别可以粗略分为 应用 和 游戏.APP的开发周期是极其快速的,在实际开发流程中,我们总会有一些需求迫使我们短时间内快速上线,比如需求流程出错,程序员主观导致的一些bu

Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. wap银联支付流程是这样:客户端---> 服务器(构建支付请求)--> 银联支付 ---> 返回到服务端(处理支付结果).所以对于手机网站银联支付没有问题,但是对于ios端app和android端app, 再通过wap支付,发现支付成功后,很难在回到app客户端了. 所以这里就必须借助Pho