iOS项目导入HTML文件
HTML文件导入到项目时不要通过“右键-Add Files to ...”的方式,这样导入的HTML文件会直接放到项目的bundle下,HTML文件原先的目录结构会被删除,导致链接到HTML文件里面的css和js文件路径错误。正确的方式时直接将文件拖到Xcode工程中,选择"Create folder refrences"选项,这样文件的目录结构才能完整的导入。导入的HTML文件是以蓝色文件夹的状态存在的。
iOS加载HTML文件
//设置webView
_webView.scalesPageToFit = YES;
_webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
_webView.scrollView.bounces = NO;
//查找HTML路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"SelectReader" ofType:@".html" inDirectory:@"html/html"];
NSURL *url = [NSURL fileURLWithPath:path];
//加载HTML
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
iOS监听JS事件
//html代码,给a标签添加点击事件,传递参数‘0’
<a onclick="selReader('0');">
//iOS代码
//导入系统框架
#import <JavaScriptCore/JavaScriptCore.h>
//在webView加载完成后设置js事件的回调函数
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
//创建js句柄
_context = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//为 js的selReader事件添加回调
_context[@"selReader"] = ^(NSString *row){
NSLog(@"%@", row);
};
}
iOS调用JS函数
//JS文件中定义函数,根据传递进来的数组,动态添加标签
function updateTable(datasource) {
for(i in datasource) {
//生成标签的文本
var func = "\'" + i + "\'"; //拼接标签点击事件的参数
//创建div标签,给div标签指定类,添加点击事件
var text = '<div class = "reader" onclick="selectReader(' + func + ');">' + '<p>' + datasource[i] + '</p>' +'<hr>' +'</div>';
//追加标签
$("#deviceList").append(text);
}
}
//iOS文件
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
_context = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//html的数据源
NSArray *dataSource = @[@"FT_000000001", @"FT_000000002", @"FT_000000003"];
//获取JS定义的updateTable函数
JSValue *function = _context[@"updateTable"];
//调用JS函数
[function callWithArguments:@[dataSource]];
//监听div标签的点击事件
_context[@"selectReader"] = ^(NSString *reader){
NSLog(@"%@", reader);
};
}