iOS javascrip和oc混编 互相调用

一.OC调用javascrip

今天在做项目时,要求将html数据用网页控件显示出来,给出的html数据是

<p><img src="/uploads/ueditor/1466598011338154.jpg" style="" title="1466598011338154.jpg"/></p><p><img src="/uploads/ueditor/1466598011168049.jpg" style="" title="1466598011168049.jpg"/></p><p><br/></p><p><img src="/uploads/ueditor/1466598011419605.jpg" style="" title="1466598011419605.jpg"/></p><p><img src="/uploads/ueditor/1466598011981633.jpg" style="" title="1466598011981633.jpg"/></p><p><br/></p>
最终做出来的效果是



首先,建立一个html文档。

<html>
    <head>
        <meta charset = "UTF-8">
            
            <script type="text/javaScript">
                
                //这个方法将html写入body中
                function postStr(str1){
                    document.write(str1);
                }
            
                //这个方法设置图片的格式
                function widthFit(width1)
                {
                    //获取所有的图片imgs数组
                    var imgs=document.getElementsByTagName('img');
                    for(i=0;i <imgs.length;i++){
                        var src = imgs[i].src;
                        //添加http前缀
                        if(src.substr(0,4)!='http')
                        {
                            src = src.substr(7);
                            imgs[i].src = 'http://114.55.231.81/meigou'+src;
                        }
                        //设置图片的宽度为屏幕宽度
                        imgs[i].width = width1;
                    };
                }
            </script>

    </head>

    <body>
        //需要将传入的数据添加到此,所以要oc调用两个script方法;
	//方法function postStr(str1)讲数据写入
	//方法function widthFit(width1)设置数据的格式
    </body>
</html>


要加载html网页,需要用到UIWebView;

拖入一个webView,

在ViewController.m中设置好webView代理,并调用html中的JavaScript方法;

#import "ViewController.h"

#define SCREENWIDTH [UIScreen mainScreen].bounds.size.width

@interface ViewController ()<UIWebViewDelegate,NSURLSessionDelegate>
//拖入的webView
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //设置webView代理
    self.webView.delegate = self;
    //设置webView url路径
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"index" withExtension:@"html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //webView 加载请求
    [self.webView loadRequest:request];
}

#pragma mark -- 这是webView的代理方法 当网页加载完后执行
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    //需要加载的html数据,从网络接口获取,这里举例直接写
    NSString *str1 = @"<p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241505114807.jpg\" style=\"\" title=\"1478241505114807.jpg\"/></p><p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241505421988.jpg\" style=\"\" title=\"1478241505421988.jpg\"/><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241572708383.jpg\" title=\"1478241572708383.jpg\" alt=\"20161104_141649_002.jpg\"/></p><p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241506884794.jpg\" style=\"\" title=\"1478241506884794.jpg\"/></p><p><br/></p>";
    
    //调用html中的第一个js方法,写入数据
    [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"postStr('%@');",str1]];
    
    //调用html中的第二个js方法,设置格式,图片的宽度为屏幕宽度
    [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"widthFit('%f');",SCREENWIDTH]];
 }

@end

当web网页加载完后,会自动调用index.html中的两个JavaScript方法。


二.JavaScript调用OC

      同样在html中,我们先写一个button,button的点击事件是一个JavaScript方法。这个方法中调用window.location.href 来打开一个URL页面。

     在oc中,用UIwebView的的一个代理方法,来获取到window.location.href要打开的URL字符串,判断该字符串后可以进行一系列的操作。

    index.html

<html>
    <head>
        <meta charset = "UTF-8">
    </head>
       <body>
           <button onclick = "getImage();">访问相册</button>
           <script>
               function getImage()
               {
                   window.location.href = "xw://getImage";
               }
           </script>
       </body>
       
</html>


ViewController.m

#import "ViewController.h"

@interface ViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"index" withExtension:@"html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
}

#pragma mark -- 操作网页
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *str = request.URL.absoluteString;
    NSLog(@"%@",str);
    if([str isEqualToString:@"xw://getImage"])
    {
        [self getImage];
    }
    return YES;
}

- (void)getImage
{
    //这是被调用的方法
    NSLog(@"这是被调用的方法");
}

@end

如此就可以在JavaScript中调用到oc的方法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值