iOS-UIWebview与web端交互(javascript脚本)iOS公开接口供web端调用
2015-11-16 19:18
555 查看
//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 alloc] initWithTitle:@"msg
from js"message:str delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
};
//
__block typeof(self)
weakSelf = self;
context[@"addSubView"] = ^(NSString *viewname)
{
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 500, 300, 100)];
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
![](http://img.blog.csdn.net/20151116191947542?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20151116192122106)
[ 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 alloc] initWithTitle:@"msg
from js"message:str delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
};
//
__block typeof(self)
weakSelf = self;
context[@"addSubView"] = ^(NSString *viewname)
{
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 500, 300, 100)];
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
相关文章推荐
- Android应用内多进程分析和研究
- 如何设计一个 iOS 控件?(iOS 控件完全解析)
- Android中的ListActivity
- Android-----Fragment抽取
- Android 实现QQ侧滑界面之实现
- Qt浅谈之二十App自动重启及关闭子窗口(六种方法)
- Android:Service进程间相互通信: Messenger(系列4)
- Android布局
- 微信开发:自动回复和多客服开发
- ubuntu创建wifi热点(android可识别)
- android自定义之 5.0 风格progressBar
- Android 文件相关总结
- 说明一下这两天碰到的android环境的问题
- 关于android service的个人理解
- Android中常被利用的漏洞
- 命令行修改Android系统时间
- cocos2d-x-v3安卓平台tinyxml2读取xml出错
- android 分辨率自适应
- Android数据库ORMlite框架
- Androids识别带验证码的短信