在项目中需要通过UIWebVIew打开一个网页,在网页中点击按钮弹出oc的对话框。
在UIWebview中载入的js代码中通过改变document.locations=“”
// 需要使用javascriptCore.framework库
#import <JavaScriptCore/JavaScriptCore.h>
// index.html 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="">
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<script type="text/javascript" src="index.js"></script>
</head>
<button id="hallo" οnclick="buttonClick()"> 点击button</button>
</body>
</html>
该函数在index.js中定义
function buttonClick()
{
close_page("hello world");
}
意思是点击这个button,就调用close_page()函数,close_page()函数显然是我们在oc中实现的一个block段,
JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
获取该UIWebview的javascript执行环境。
// 在webView 函数中 写入
回调的函数名称 为close_page
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// 点击完成按钮 返回上页面 js 与 oc 交互
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"close_page"] = ^() {
NSArray *args = [JSContext currentArguments];
for (JSValue *titleName in args) {
NSLog(@"title--%@", titleName);
}
};
}