2

我对 iOS 开发非常陌生,所以请保持温和。

我知道webViewDidFinishLoad每个<iframe>加上原始html页面都会触发。

我正在尝试查找导致webViewDidFinishLoad. 据我所知,我只能访问 webView.request.mainDocumentURL。

我觉得这很令人困惑。在该shouldStartLoadWithRequest方法中,也为每个<iframe>原始 html 请求触发,您可以访问相关 URL,无论是 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。我希望这尽快发生,所以我不想等到一切都完成。

4

1 回答 1

0

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

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

祝你好运。

于 2013-07-29T12:04:33.683 回答