iOS与js交互的2种方法

来源:互联网 发布:卫宁软件股票代码 编辑:程序博客网 时间:2024/06/11 09:41

- (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;}


0 0