在UIWebView中提交表单

时间:2011-09-19 05:40:58

标签: iphone web-services uiwebview

我在UIWebView中有一个表单与W​​eb服务交互,当我提交表单时,数据被发送到Web服务,它会将结果返回给另一个UIWebView。两个UIWebViews位于导航控制器下,因此当使用提交表单时,它会滑动到另一个视图以显示结果。任何人都可以指出我如何实现这一目标吗?我在表单元素中填写“action”属性是什么?如何将用户输入返回给应用程序,以便我可以使用Web服务?我是这个领域的新手,任何帮助将不胜感激。谢谢!


更新

有没有办法将表单数据从Web视图保存回我的程序?我认为最好将表单数据保存回程序(即将params存入nsstring),然后单击“提交”按钮,然后开始查询Web服务。

2 个答案:

答案 0 :(得分:12)

您可以使用

stringByEvaluatingJavaScriptFromString

用于从目标c触发javascript方法并从该方法获取返回值的函数。

例如

//Calling the getTheUsername in the javascript.
NSString *userName = [yourWebView stringByEvaluatingJavaScriptFromString:@"getTheUsername()"];

并在javascript中

//Method in javascript
function getTheUsername()
{
return userNameVariable;
}

我怀疑你在这里可能反之亦然(从javascript调用obj-c方法)。这不能直接在这里完成。

设置UIWebViewDelegate,并实现webView方法:shouldStartLoadWithRequest:navigationType:。在您的JavaScript代码中,导航到一些伪造的URL,该URL会对您要传递给应用的信息进行编码,例如: window.location =“someLink:// yourApp / form_Submitted:param1:param2:param3”; 在您的委托方法中,查找这些虚假URL,提取您需要的信息,采取适当的操作,并返回NO以取消导航。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

    NSLog(@"%@",[[request URL] query]);

    return YES;
}

答案 1 :(得分:1)

如果我理解您的问题,我认为以下步骤可以帮助您提供解决方案。

  1. 在表单的操作中,您需要将URL写入Web服务。
  2. 在表单中,输入字段的名称应与Web服务所需参数的名称相匹配。
  3. 在您的第一个UIWebView导航控件中,创建具有第二个UIWebView的屏幕对象,并将Web服务的响应设置为该对象的实例成员。
  4. 在您的第一个UIWebView导航控件中,您需要写入 [self presentModalViewController:webView2Object animated:YES];
  5. 在拥有webView2的屏幕中,在加载第二个UIWebView之前解析响应。并使用javascript将其与显示的页面一起注入。