我是iOS新手(.NET专业版),所以这可能是一个简单的问题,但我无法通过SO搜索或Google找到任何东西(也许找不到正确的术语)。
我正在编写一个应用程序,通过它的Web界面显示来自DD-WRT路由器的信息。我没有问题显示初始页面并浏览任何其他页面,但如果我对表单进行任何更改(并重定向到apply.cgi或applyuser.cgi),UIWebView是空白的 - 它应该显示同一页面,表单提交更改。该网站在Mobile Safari中运行良好,我觉得很有趣,但我猜UIWebView并不完全相同。
我认为iOS代码非常适合显示网页,但我会在下面列出。我不能让你访问我的路由器,因为,这不是一个好主意:)希望有DD-WRT路由器的人可以提供帮助(或者知道我的问题是什么)。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *sURL = @"http://user:pass@XXX.XXX.X.X";
NSURL *url = [NSURL URLWithString:sURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
self.webView.delegate = self ;
}
我在webViewDidFinishLoad
方法中使用Javascript做了一些事情,但我知道这不是罪魁祸首,因为当我发表评论时它仍然会发生。
答案 0 :(得分:1)
我自己想出了问题。我认为其中一部分是用户名& URL中的密码(这只是一个临时措施)因为我发现该方法在移动版Safari和桌面版Chrome中提供了相同的结果。 所以我在我的项目中添加了MKNetworkKit,它提供了一种向我的请求添加身份验证的简单方法,并发现我必须发出一个特定的POST数据请求,然后重新加载页面以查看更改。
在(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
方法中,我检查是否([request.HTTPMethod isEqualToString:@"POST"])
并执行此操作:
NSString *sPostData = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];
NSArray *aPostData = [sPostData componentsSeparatedByString:@"&"];
NSMutableDictionary *dPostData = [[NSMutableDictionary alloc] init];
//i don't know if this is the best way to set a dictionary, but it works
for (id apd in aPostData)
{
NSString *key = [apd componentsSeparatedByString:@"="][0];
NSString *val = [apd componentsSeparatedByString:@"="][1];
[dPostData setValue:val forKey:key];
}
MKNetworkEngine *engine = [[MKNetworkEngine alloc] init];
MKNetworkOperation *op = [engine operationWithURLString:[request.URL description] params:dPostData httpMethod:@"POST"];
[op setUsername:@"myUserName" password:@"myPassword" basicAuth:YES];
self.postedRequest = TRUE; //a bool I set so, when it comes to webViewDidFinishLoad, I reload the current page
[op start]; //send POST operation