js 与 ios Android交互

本文详细介绍了JavaScript如何与Android及iOS平台进行交互。对于Android,通过@JavascriptInterface注解实现JS调用Android方法;而对于iOS,则通过UIWebView代理实现JS调用OC方法。此外,还提供了具体的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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";

 

转载于:https://www.cnblogs.com/turnswing/p/4421993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值