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

iOS与js交互的2种方法

2017-03-24 12:02 246 查看
- (void)viewDidLoad {
[superviewDidLoad];

UIWebView *webView = [[UIWebViewalloc] initWithFrame:self.view.bounds];
NSString *filePath = [[NSBundlemainBundle] pathForResource:@"jsOC1"ofType:@"html"];
[webView loadRequest:[NSURLRequestrequestWithURL:[NSURLfileURLWithPath:filePath]]];
webView.delegate =self;
[self.viewaddSubview:webView];
}

//1、获取当前页面的url,。
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *currentURL = [webViewstringByEvaluatingJavaScriptFromString:@"document.location.href"];
NSString *title = [webViewstringByEvaluatingJavaScriptFromString:@"document.title"];

JSContext *jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
JSValue *jsValue = [jsContextevaluateScript:@"showAppAlertMsg"];
[jsValue callWithArguments:@[@"这是app本地交互文案"]];
NSLog(@"currentURL ===%@\ntitle ===%@\njsValue ===%@",currentURL,title,jsValue);
//定义好JS要调用的方法, share就是调用的share方法名
jsContext[@"secondClick"] = ^() {
NSLog(@"+++++++Begin Log+++++++");
NSArray *args = [JSContextcurrentArguments];

dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertViewalloc] initWithTitle:@"方式二"message:@"这是OC原生的弹出窗"delegate:selfcancelButtonTitle:@"收到"otherButtonTitles:nil];
[alertView show];
});

for (JSValue *jsValin args) {
NSLog(@"%@", jsVal.toString);
}

NSLog(@"-------End Log-------");
};
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL * url = [requestURL];
NSLog(@"urlScheme:%@",[urlscheme]);
if ([[urlscheme] isEqualToString:@"firstclick"]) {
NSArray *params =[url.querycomponentsSeparatedByString:@"&"];

NSMutableDictionary *tempDic = [NSMutableDictionarydictionary];
for (NSString *paramStrin params) {
NSArray *dicArray = [paramStrcomponentsSeparatedByString:@"="];
if (dicArray.count >1) {
NSString *decodeValue = [dicArray[1]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[tempDic setObject:decodeValueforKey:dicArray[0]];
}
}
UIAlertView *alertView = [[UIAlertViewalloc] initWithTitle:@"方式一"message:@"这是OC原生的弹出窗"delegate:selfcancelButtonTitle:@"收到"otherButtonTitles:nil];
[alertView show];
NSLog(@"tempDic:%@",tempDic);
returnNO;
}
returnYES;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: