您的位置:首页 > 移动开发

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




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: