JavaScript直接调用OC代码

在项目中需要通过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" onclick="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);
        }
    };
}


















猜你喜欢

转载自blog.csdn.net/u011043997/article/details/52096818
今日推荐