我有一个使用stringByEvaluatingJavaScriptFromString
修改我无法访问的HTML的应用程序(如Greasemonkey)。具体来说,当我从JS发出NSUserDefaults
事件时,我想在onSubmit
中存储登录表单中的用户名和密码。
我已经有了自定义网址方案和onSubmit
处理程序。我可以传递URL用户名和密码,它会存储它。我只遇到onSubmit
处理程序的问题:如何在提交表单之前使用自定义网址保存数据?
我不使用任何Javascript框架,我的代码仅针对Mobile Safari。
答案 0 :(得分:1)
抱歉没有直接回答你的问题,但我认为你可能想要考虑一个更简单的选择。您应该能够在不向UIWebView
注入任何javascript的情况下嗅探表单提交。只需在UIWebViewDelegate
:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[[request URL] absoluteString] hasPrefix:@"https://www.thirdpartysite.com/theirLoginScript"]) {
NSString *username = [self parseUsernameFromRequest:request];
NSString *password = [self parsePasswordFromRequest:request];
[self saveUsername:username andPassword:password];
}
return YES;
}
我已经将parseUsernameFromRequest:
,parsePasswordFromRequest:
和saveUsername:andPassword:
的实现留给了您的想象力。
(提示:如果表单使用GET方法,那么您可以使用[[request URL] parameterString]
获取其参数。如果表单使用POST方法,则可以使用[[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]
。)
顺便说一句,您绝不应该在NSUserDefaults中存储密码等敏感信息。 Apple提供钥匙串服务以安全地存储此类信息。不幸的是,使用Keychain服务非常复杂,因此您可能需要查看Buzz Andersen的Simple iPhone Keychain Code。