我对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。我希望这种情况尽快发生,所以我不想等到一切都结束。
答案 0 :(得分:0)
将UIWebView视为您的浏览器。您正在询问的对象的范围是在浏览器级别,iFrames比这更精细。填充iFrame的URL用于流式传输页面的该部分的内容,但是出于UIWebView的目的,您只需要记住主URL,以便可以管理(重新加载等等)页面。 URL明确地带有关于如何管理iFrame内容的说明。
如果你真的需要那些iFrame源URL,只需要扩展UIWebView来保存一个链接数组(在“shouldStartLoadWithRequest
”中填充数组)。然后,您可以使用该链接列表执行任何操作。
祝你好运。