UIWebView与javascript交互二通过页面的响应事件获取页面输入框内的值

接上篇文章,上篇文章实现了UIwebview对html文件的加载和对js事件的响应,但是对html页面上输入的值没有获取。

今天就来说说这个首先要用到工具类WebViewJavascriptBridge 下载地址 然后将工具类导入到项目中。

其中test.js我做了如下的调整:

window.onerror = function(err) {
    log(‘window.onerror: ‘ + err)
}

function connectWebViewJavascriptBridge(callback) {
    if (window.WebViewJavascriptBridge) {
        callback(WebViewJavascriptBridge)
    } else {
        document.addEventListener(‘WebViewJavascriptBridgeReady‘, function() {
            callback(WebViewJavascriptBridge)
        }, false)
    }
}

function check(){
    connectWebViewJavascriptBridge(function(bridge) {
        bridge.init(function(message, responseCallback) {
            log(‘JS got a message‘, message)
            var data = { ‘Javascript Responds‘:‘Wee!‘ }
            log(‘JS responding with‘, data)
            responseCallback(data)
        })

        bridge.registerHandler(‘testJavascriptHandler‘, function(data, responseCallback) {
            log(‘ObjC called testJavascriptHandler with‘, data)
            var responseData = { ‘Javascript Says‘:‘Right back atcha!‘ }
            log(‘JS responding with‘, responseData)
            responseCallback(responseData)
        })

        var str = document.getElementById(‘input1‘).value;//获取输入框的内容

        bridge.callHandler(‘submit‘, str, function(response) {
            log(‘JS got response‘, response)
        })//将输入框的内容通过回调 传给OC页面。实现交互

    })

}

另外对ViewController.m的内容作了如下修改:

//
//  ViewController.m
//  HTML5Demo
//
//  Created by Jack on 15/3/27.
//  Copyright (c) 2015年 Jack. All rights reserved.
//

#import "ViewController.h"
#import "WebViewJavascriptBridge.h"
@interface ViewController ()
@property WebViewJavascriptBridge* bridge;
@end

@implementation ViewController

@synthesize myWebView;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height-100)];
    myWebView.delegate =self;
    [self.view addSubview:myWebView];

}

- (void)viewWillAppear:(BOOL)animated {
    if (_bridge) { return; }

    [WebViewJavascriptBridge enableLogging];

    _bridge = [WebViewJavascriptBridge bridgeForWebView:myWebView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"ObjC received message from JS: %@", data);

    }];

    [_bridge registerHandler:@"submit" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"submit called: %@", data);//data就是submit被触发后传递过来的数据

    }];

//    [_bridge send:@"A string sent from ObjC before Webview has loaded." responseCallback:^(id responseData) {
//        NSLog(@"objc got response! %@", responseData);
//    }];
//
//    [_bridge callHandler:@"testJavascriptHandler" data:@{ @"foo":@"before ready" }];
//
//
//
//    [_bridge send:@"A string sent from ObjC after Webview has loaded."];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
    [myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: path]]];

}

#pragma mark UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    return true;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"开始网页");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
    NSLog(@"title=%@",title);
    //NSString *st = [ webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(‘field_1‘).value"];
    NSString *st = [webView stringByEvaluatingJavaScriptFromString:@"document.forms[0][‘input1‘].value"];
    NSLog(@"input1 =%@",st);

}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"error %@",error);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

别的页面都没有改变。下面就开始运行吧运行结果如下:

终于可以交互了,哈哈,在接下来的文章中将会和大家一块学习通过OC页面传值到html页面中。

作为一名菜鸟在这一块希望大家多多给予指导哦。^_^

差点忘了,这里可以下载代码:demo

时间: 2024-10-08 17:16:29

UIWebView与javascript交互二通过页面的响应事件获取页面输入框内的值的相关文章

UIWebView与javascript交互三通过OC页面来改变html页面上的值

有一件事要说一下哦, <UIWebView与javascript交互一>这篇博客被几个网站给转载了,很开心,但是开心之余有一点觉得要说一下,大家转载别人的文章的时候记得说明一下转载的出处,有两方面的原因,第一就是尊重作者的劳动成果,另一方面,由于博客里有的时候有一些demo,但是转载的人并没有把demo的下载地址给贴出来,给看到博客的同学带来了很大的不便. 接上篇,我们已经实现了通过html按钮来传数据到oc页面,但是没有实现通过oc页面传数据到js页面,并修改html的页面,谈不上真正完全的

IOS中UIWebView和JavaScript交互(转自http://blog.2jun.net/2012/11/02/webviewandjs/)

IOS中UIWebView和JavaScript交互 当程序中使用到UIWebView控件的时候,难免会遇到需要与页面进行交互的情况.这种情况在android平台下比较容易处理,android平台下WebView控件的addJavascriptInterface()方法可以很轻松的完成交互,而IOS上就稍复杂一些. 页面与客户端的交互是通过JS来完成的,通常情况下与JS的交互可以分为两种:客户端传递给JS一些数据和JS向客户端请求一些本地操作.下面分别对这两种情况进行处理. JS向客户端请求本地

Xcode6 UIWebView与JavaScript交互(issue fix)

这篇文章中,有介绍UIWebView与JavaScript交互,在UIWebView截获JavaScript请求处理,从app的角度,这是JavaScript的Hook请求. 在Xcode6之前的App版本,JavaScript可以这样将Hook请求发送出来: HTML: <li><a href="testapp://function=test&callbackJS=testCallback">test link</a></li>

UIWebView与javascript交互一

去年看了两本书上面都有提到UIWebView与javascript的交互,但是很少提交具体的操作.今年时间稍微闲下来,我觉得很有必要把这个知识点整理一下. 首先一定要储备一些简单的javascript知识,我看的是这本电子书<javascript从入门到精通>另外还要有一些简单的html知识的基础. 我主要实现的功能就是加载html文件,并操作html上的输入框,按钮进行操作. test.html的代码如下: <html> <head> <title>tes

IOS UIWebView与JavaScript交互实现Web App

上一篇文章讲到了Android WebView与JavaScript的交互问题,现在来讲一下IOS的UIWebView与JavaScript的交互问题.和Android的相比,IOS的会略显笨拙一些不大友好,然而也算是在未引用第三方框架的基础上完成了交互的问题.OK,现在开始吧. 1.首先在IOSA->Application下选择Single View Application创建一个IOS应用,命名为JSInteraction,然后我删去了Info.plist文件里Main storyboard

iOS 利用UIWebView与JavaScript交互的最简单办法

这里说的是针对iOS的!并且方法很简单!!并且验证可行的!!! 1, UIWebView调用 JavaScript 的函数: NSString* strValue = [webView stringByEvaluatingJavaScriptFromString:@"YourFunctionName('YourParameter')"]; 上面这句就是调用 JavaScript里面自定义的函数 YourFunctionName(传入参数'YourParameter',取得返回值赋给st

iOS 利用UIWebView与JavaScript交互的最简单办法(本人已验证可行)

本贴转自:http://blog.csdn.net/h_o_w_e/article/details/28887005 1, UIWebView调用 JavaScript 的函数: NSString* strValue = [webView stringByEvaluatingJavaScriptFromString:@"YourFunctionName('YourParameter')"]; 上面这句就是调用 JavaScript里面自定义的函数 YourFunctionName(传入

通过js触发onPageView和event事件获取页面信息

注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814814715022148100/ 承接上一篇文档<js页面触发launch事件编写> pageView事件是pc端的基本事件类型,主要是描述用户访问网站信息 思路图 首先keys中添加事件标识 然后发送到服务器的列名称 执行对外方法前必须执行的方法preCallApi onPageView事件方法 添加pageView事件触发 查看日志效果 查看网络访问信息 工具显示 编写一个html表示跳转页面 访问地

VC与JavaScript交互(二)

最近关于vc++里面通过IDispatch的Invoke来实现和js的交互做点了tp,并且对以前不了解的"直接读取js变量值"和"传递多个参数"的部分重新实现了下. 1,调用js的函数,并传递多个参数 CComQIPtr<IHTMLDocument2> pDoc = m_browser.get_Document(); if (pDoc) { CComQIPtr<IDispatch> spDisp; HRESULT hr = pDoc->