iOS-UIWebview与web端交互(javascript脚本)iOS公开接口供web端调用

//UIWebView加载网页  UIWebView * XWwebview =[[UIWebview alloc]initWithFrame:rect];
XWwebview  loadRequest :request];
下面就需要用到javascript和web端 进行交流了
第一种:只能对web端的某些属性进行修改 但用在监听某个按钮点击时 后一定的局限性

-(void)webViewDidFinishLoad:(UIWebView *)webView

{

    //程序会一直调用该方法,所以判断若是第一次加载后就使用我们自己定义的js,此后不在调用JS,否则会出现网页抖动现象

    if (!_isFirstLoadWeb) {

        _isFirstLoadWeb = YES;

    }else

        return;

    //webview添加一段自定义的javascript

    

    [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"

     "script.type = 'text/javascript';"

     "script.text = \"function myFunction() { "


     //注意这里的Name为搜索引擎的Name,不同的搜索引擎使用不同的Name

     //<input type="text" name="word" maxlength="64" size="20" id="word"/> 百度手机端代码

     "var field = document.getElementsByName('word')[0];"

     

     //给变量取值,就是我们通常输入的搜索内容,这里为常乐

     "field.value='常乐';"     

     "document.forms[0].submit();"

     "}\";"

     "document.getElementsByTagName('head')[0].appendChild(script);"];

    

    //开始调用自定义的javascript

    [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];   

}

第二种:制定协议  公开一个接口给web端调用  在web端某个按钮被点击后 响应他自己的方法是  加入ios端接口方法

-(void)webViewDidFinishLoad:(UIWebView *)webView

{

    [self.XWImage setHidden:YES];

    context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    

    // 打印异常

    context.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {

        context.exception = exceptionValue;

        NSLog(@"%@", exceptionValue);

    };

    

    

    context[@"Native"] = self//JSExport 协议关联 native 的方法

    

    

    context[@"log"] = ^(NSString *str){//block 形式关联 JavaScript function

        NSLog(@"%@", str);

    };

    //

    //  block 形式关联 JavaScript function

    context[@"alert"] = ^(NSString *str) {

        UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"msg from js"message:str delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nilnil];

        

        

        [alert show];

    };

    //

    __block typeof(self) weakSelf = self;

    context[@"addSubView"] = ^(NSString *viewname) {

        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10500300100)];

        view.backgroundColor = [UIColor redColor];

        UISwitch *sw = [[UISwitch alloc]init];

        [view addSubview:sw];

        [weakSelf.view addSubview:view];

    };

}

完成这段代码后 我们需要做的只是写一个接口给web端使用
如: -( void )doWeiXinPay:( NSString  *)payRequestStr;

-(void)shareIOSWXFriend:(NSNumber *) clickButton :(NSString *)myTittle :(NSString*)mydistribute :(NSString *)logText ;

需要注意的是  在web端插入的内容需带这边制定的协议

如 native.doWeiXinPay(字符串)//括号内放响应的参数

   native.shareIOSWXFriend(数字,字符串,字符串,字符串)//依次放三个参数

上面需要注意的时候用参数进行传值时 不要带UIImage UIButton等这些对象   只能传数据类型


如有疑问欢迎联系qq:457040616 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值