当前位置:  开发笔记 > 编程语言 > 正文

如何判断UIWebView中iframe加载与整个页面加载的区别?

如何解决《如何判断UIWebView中iframe加载与整个页面加载的区别?》经验,为你挑选了2个好方法。

在[webView:shouldStartLoadWithRequest:navigationType:]事件中,如何判断加载内容的iframe与整个页面加载内容之间的区别?看起来两者都用相同的参数调用同一个事件,唯一的区别是要加载的URL,所以没有办法分辨两者之间的区别.

我想到了几种方法来区分它们:

解析页面的源代码并存储所有iframe src属性的列表,假设如果url加载是我列表中的其中一个,那么它就是iframe.当然,如果它实际上导航到页面,这个假设可能是不正确的.

与上面相同,但在页面上运行一些JavaScript并获取iframe src属性.

使用JavaScript,在用户尝试导航到页面时设置挂钩,类似于http://niw.at/articles/2009/02/06/how-to-enable-the-popup-window-on-uiwebview/EN

使用JavaScript,在iframe尝试加载数据之前设置挂钩(不知道我将如何做这样的事情).

修改每个iframe的src属性,在其src属性的末尾包含一个特殊字符串,例如"#iframe-loading".使用此修改后的源代码加载UIWebView.虽然这只适用于第一次查询原始页面上存在的iframe,而不是那些动态加载的iframe,例如通过JavaScript.

通过YES在[webView:shouldStartLoadWithRequest:navigationType:]事件中返回来正常加载页面,并且一旦加载完成,看看WebView的URL是否发生了改变...如果这样做意味着它是页面重定向,如果不是这样的话意味着它是一个加载的iframe.

使用JavaScript,覆盖window.location属性setter以运行我自己的代码,然后才能实际更改窗口的位置.然后我可以与Objective-C进行通信,让它知道下一个加载实际上是一个重定向.这是在JavaScript中重定向的唯一方法吗?

最好的方法是什么?你能想到我没有想过的任何方法吗?iframe有一个特殊的事件/属性,我可以使用JavaScript操作来帮助我吗?

谢谢

更新:它不像检查navigationType那么简单.虽然单击链接打开新页面将显示为navigationType = 0,但JavaScript重定向(更改window.location)将显示为navigationType = 5. iframe加载也显示为navigationType = 5.因此,当navigationType = 5,您不知道整个页面是通过JavaScript更改了URL还是只是在同一页面上加载了iframe.



1> 小智..:
 (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

BOOL isFrame = ![[[request URL] absoluteString] isEqualToString:[[request mainDocumentURL] absoluteString]];

}



2> Senseful..:

我只是用这个方法:

通过在[webView:shouldStartLoadWithRequest:navigationType:]事件中返回YES来正常加载页面,并且一旦加载完成,看看WebView的URL是否发生了改变...如果这样做意味着它是页面重定向,如果不是它可能意味着它是一个加载的iframe.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有