《Object-OC 里面调用JS 和 接入是遇到的问题的解决》

/*

   Object-OC 里面调用JS 接入是遇到的问题的解决》

 */

/*

    随着现代App的开发,轻量级的页面逐渐也都出现在App里面。但是有些其他特出功能的界面要使用的化。如果把js 放到服务器上,再给出一个代码去调用。那将花费很多时间。大多处理是将js文件放到本地。进行加载。。。。

 */


效果图:

《Object-OC 里面调用JS 和 接入是遇到的问题的解决》_第1张图片

//  Created by 周双建 on 15/12/18.

//  Copyright © 2015 周双建. All rights reserved.

#import "ViewController.h"

@interface ViewController ()<UIWebViewDelegate>

typedef enum {

    WebLoad_Q   = 1,

    WebLoad_W   = 2,

    WebLoad_E   = 3

    

}WebLoad;

//首先创建一个展示js功能的控制器

@property(nonatomic,strong) UIWebView * JS_WebView;

@end

@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // 我们做一些准备,将你的js 文件导入到工程里面 注意:这里会残生很多问题,下面再说

    // 我们初始化 JS_WebView

    [self  makeWeb];

    // Do any additional setup after loading the view, typically from a nib.

}

#pragma mark  初始化

-(void)makeWeb{

    _JS_WebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 80, self.view.bounds.size.width, self.view.frame.size.width *448/1072.0)];

    //设置其代理 添加代理协议

    _JS_WebView.delegate = self;

    //设置web 适合给定尺寸的大小

    //_JS_WebView.scalesPageToFit = YES;

    //给其加载js 方式

    [self webLoad:WebLoad_W];

    //Web添加到控制器上

    [self.view addSubview:_JS_WebView];

    

}

#pragma mark  Web 是用哪种方式加载 HTML

-(void)webLoad:(int)type {

    switch (type) {

        case 1:

        {

            // 先声明一个 NSURLRequest

            NSURLRequest * Request = [NSURLRequest requestWithURL:[NSURL URLWithString:[self HTMLpath]]];

            // web 进行加载HTML

            [_JS_WebView loadRequest:Request];

        }

            break;

        case 2:

        {

            // 声明一个 NsData  类型 HTML 转化为二进制流,在用Web加载

            NSData * data = [NSData dataWithContentsOfFile:[self HTMLpath]];

            // web 进行加载

            [_JS_WebView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

        }

            break;

        case 3:

        {

            //HTML文件转化为字符串

            NSString * str = [[NSString alloc]initWithContentsOfFile:[self HTMLpath] encoding:NSUTF8StringEncoding error:nil];

            // 使用Web 进行加载

            [_JS_WebView loadHTMLString:str baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

        }

            break;

        default:

            break;

    }

}

#pragma mark 实现 web 的代理协议方法

//web 加载完成时调用的方法

-(void)webViewDidFinishLoad:(UIWebView *)webView{

    //调用js  的函数

   NSString * JS = [NSString stringWithFormat:@"loadDetail(\"%d\")",70];

    [webView stringByEvaluatingJavaScriptFromString:JS];

    //可以运行了。一运行。马丹没效果。只是显示了一个 0% .下面分析原因

    /*

       导致没有加载成功的原因有:

       第一种: 在获取HTML文件的路径,错误,导致没有加载成功

       第二种: 是你的JS 文件的错误。你可以在js里面自定义一个方法看是否运行

       例如:

         

     function getOver {

     return "通过";

     }

       

     调用这个方法。检查是否调用。调用说明不是你的问题。否者,你就要检查 JS_Str 的写法。

     

       第三种: 就是HTML 的文件路径不对(这个路径是HTML里面调用 CSS的路径不对)。

       需要注意的是:

         Xcode 是个好的开发工具。但是在加载 HTML的时候,就有点不好之处。那就是将你HTML的文件目录破坏,将其融合到一个目录下。这也是导致加载不成功的重要原因

     第四种:  就是你在加载HTMl的时候,使用 这两个方法

     - (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

     - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

     的时候,最后的  baseURL: 一定要给 URl 。否者会不显示图片类的加载

     

     第六种: fileURLWithPath    URLWithPath  的使用区别(重点,指出)

     */

    /*

     

       上面已经列举出可能出现的错误的原因,其中第三种是常见的。下面就针对第三中给出解决方法。

       解决一:

            由于XcodeHTML的文件目录破坏,那我们就将HTML里面的路径修改,例如:

          /

     

     <!DOCTYPE html>

     <html lang="en">

     <head>

     <meta charset="UTF-8">

     <meta name="viewport" content="width=device-width,initial-scale=1.0">

     <meta name="viewport"

     content="height=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">

     <title></title>

   (1)  <script src="src/plugins/jquery-1.11.3.min.js"></script>

   (2)  <script src="src/threesixty.js"></script>

   (3) <link rel='stylesheet' href="src/styles/threesixty.css" type="text/css">

     <script type="text/javascript">


           /

     上面需要修改的是 1)(2)(3 行。   src/plugins  src/styles   scr  去掉。

     解决方法二:

        将你的 JS 代码 打包为Bundle包。

     */

}

#pragma mark  获取js文件的路径

-(NSString*)HTMLpath{

    NSString *resourcePath = [ [NSBundle mainBundle] resourcePath];

    NSString *filePath = [resourcePath stringByAppendingPathComponent:@"test.html"];

    return filePath;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end





你可能感兴趣的:(JavaScript,html,webView,js调用)