【问题标题】:Submit a form in UIWebView在 UIWebView 中提交表单
【发布时间】:2011-11-19 23:31:10
【问题描述】:

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


更新:

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

【问题讨论】:

  • 您的提交按钮是原生 UIButton 还是 HTML Button 元素。
  • 它是一个html“提交”按钮,这就是为什么我想知道如何将数据保存到我的程序中。
  • 那么您应该使用我在回答中提到的第二个解决方法。导航到提交按钮中的虚假 url,shouldStartLoadWithRequest 将被触发。在该方法内部,使用 stringByEvaluatingJavaScriptFromString 调用 javascript 方法。在该 javascript 方法中返回所需的数据。明白了!
  • 我查看了您的解决方案,这对我来说似乎有点头晕。如果我在 Web 视图之外设置一个按钮并使用 javascript 将字段值返回给应用程序会怎样?
  • OK 如果您在本机中有提交按钮,请添加一个 javascript 方法,该方法将返回您所需的数据。使用 stringByEvaluatingJavaScriptFromString 调用该方法并从那里获取数据。

标签: iphone web-services uiwebview


【解决方案1】:

你可以使用

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

【讨论】:

  • 谢谢!第一个对我来说似乎更容易理解。
【解决方案2】:

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

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

【讨论】:

  • 这是否意味着我必须将请求放入表单中?由于整个表单都在 uiwebview 中,我怎样才能将结果返回到 uiview(如表格视图中的列表)?
  • 如果您在表单中保持输入元素的名称与您的 Web 服务 URL 的参数名称相同,则该参数将自动设置为您的 URL 并提交到该 URL。然后它将开始加载新页面,您可以在 webViewDidStartLoad 委托方法中检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2016-08-31
相关资源
最近更新 更多