繁体   English   中英

iPhone SDK:以编程方式提交UIWebview

[英]iPhone SDK: Submit a UIWebview programmatically

我有一个UIWebview,可以自动填写用户名和密码。 现在,我所需要做的就是让Webview自动提交,就像用户按下“登录”按钮一样。 无论如何,是否可以通过编程方式将此功能调用到Webview? 顺便说一句,如果有帮助的话,我正在使用hotmail作为网站。

要提交表单,您需要做的是执行一段JavaScript代码,找到提交按钮的DOM元素,然后在其上调用click()方法。

我对hotmail登录页面的结构一无所知,但如果“提交”按钮上有id属性,则可以使用document.getElementById(...)进行检索。 否则,您可能必须编写代码以浏览所有输入元素,以找到带有type =“ submit”的元素。

在简单的情况下,假设提交按钮的ID为“ submit_button”。 然后,在目标C代码中将具有以下内容:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *code = @"document.getElementById('submit_button').click()";
    [webView stringByEvaluatingJavaScriptFromString: code]
}

如果您需要做更复杂的事情,则可以更改代码字符串的内容。 这只是在页面上下文中运行的javascript代码。

不过,退一步,我建议您考虑一种更可靠的方法。 Hotmail的登录页面可能随时更改,如果您的应用改变了提交按钮的工作方式(例如,给它命名一个不同的名称)或使用其他检测输入的方式(例如javascript onclick处理程序),您的应用就会中断。 通常,依赖于应用程序中网站的特定HTML结构可能会引起问题-如果可以,最好使用Web服务(例如REST)样式的API(如果提供)。

在网络视图中加载的网络内容应包含用于提交页面的JavaScript。 在您的WebViewController中实现webViewDidFinishLoad:并调用stringByEvaluatingJavaScriptFromString:@"yourJavascriptSubmitMethodCall()"我离开了mac / xcode。 值得尝试。

您可以在Web视图中搜索提交按钮,然后单击第一个。 它在很多情况下都应该起作用。

- (void)clickOnSubmitButtonForWebView:(UIWebView *)webView {

    NSString *performSubmitJS = @"var passFields = document.querySelectorAll(\"input[type='submit']\"); \
    passFields[0].click()";
    [webView stringByEvaluatingJavaScriptFromString:performSubmitJS];

}

Web视图并不意味着为您调用函数。 它只会帮助您以指定的格式显示页面内容。 登录或任何其他此类功能应在网站代码的后端以编程方式进行处理。 这就是我可以说的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM