【问题标题】:UIWebView displays blank page on form submitUIWebView 在表单提交时显示空白页
【发布时间】:2013-09-29 03:23:53
【问题描述】:

我是一名 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 做一些事情,但我知道这不是罪魁祸首,因为当我将其注释掉时它仍然会发生。

【问题讨论】:

    标签: ios uiwebview dd-wrt


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多