0

我是一名 iOS 新手(.NET 专业人士),所以这可能是一个简单的问题,但我无法通过 SO 搜索或谷歌找到任何东西(也许没有寻找合适的术语)。

我正在编写一个应用程序,通过它的 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 做了一些事情,但我知道这不是罪魁祸首,因为当我将其注释掉时它仍然会发生。

4

1 回答 1

1

好吧,我自己解决了这个问题。我认为其中一部分是将用户名和密码放在 URL 中(这只是一种临时措施),因为我发现该方法在移动 Safari 和桌面 Chrome 中提供了相同的结果。因此,我将MKNetworkKit添加到我的项目中,它提供了一种向我的请求添加身份验证的简单方法,并发现我必须发出特定请求来发布数据,然后重新加载页面以查看更改。

在该(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
于 2013-09-28T19:23:53.537 回答