• 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";
  • 相关阅读:
    js函数——倒计时模块+无缝滚动
    一步步编写avalon组件02:分页组件
    mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理
    只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果
    某考试 T1 arg
    vijos 2035 奇数偶数与绚丽多彩的数
    bzoj 5093: [Lydsy1711月赛]图的价值
    [HEOI2016/TJOI2016]求和
    [TJOI2015]概率论
    Codeforces 616 E Sum of Remainders
  • 原文地址:https://www.cnblogs.com/turnswing/p/4421993.html
Copyright © 2020-2023  润新知