在webViewDidFinishLoad中访问请求的URL?

时间:2013-07-29 11:54:40

标签: ios uiwebview

我对iOS开发很新,所以请保持温和。

我了解webViewDidFinishLoad将为每个<iframe>以及原始的html页面触发。

我正在尝试查找导致该webViewDidFinishLoad的请求的网址。据我所知,我只能访问webView.request.mainDocumentURL。

我发现这令人困惑。在shouldStartLoadWithRequest方法内部,也为每个<iframe>和原始html请求触发,您可以访问相关网址,无论是iframe还是父网页。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"Parent page request: %@", request.mainDocumentURL);
    NSLog(@"Actual URL request: %@", [request URL]); // This returns what I want.
    return YES;
}

第一个日志语句将输出url。

然而,在webViewDidFinishLoad

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSURLRequest* request = [webView request];
    NSLog(@"Parent page request: %@", request.mainDocumentURL);
    NSLog(@"Request outputs the parent, not the iframe: %@", [request URL]);
    // how do I access the <iframe> url?
}

帮我StackOverflow。我的google-fu很弱,你的智慧很强。

编辑:我应该清楚这个目标。当父页面的加载事件触发时,我想要Do Stuff™,而不是iframe。我希望这种情况尽快发生,所以我不想等到一切都结束。

1 个答案:

答案 0 :(得分:0)

将UIWebView视为您的浏览器。您正在询问的对象的范围是在浏览器级别,iFrames比这更精细。填充iFrame的URL用于流式传输页面的该部分的内容,但是出于UIWebView的目的,您只需要记住主URL,以便可以管理(重新加载等等)页面。 URL明确地带有关于如何管理iFrame内容的说明。

如果你真的需要那些iFrame源URL,只需要扩展UIWebView来保存一个链接数组(在“shouldStartLoadWithRequest”中填充数组)。然后,您可以使用该链接列表执行任何操作。

祝你好运。