gpt4 book ai didi

iphone - 如何区分 UIWebView 中 iframe 加载与整个页面加载之间的区别?

转载 作者:行者123 更新时间:2023-12-03 18:25:20 25 4
gpt4 key购买 nike

在 [webView:shouldStartLoadWithRequest:navigationType:] 事件中,如何区分正在加载内容的 iframe 与整个页面加载内容之间的区别?看起来两者都使用相同的参数调用同一个事件,唯一的区别是要加载的 URL,因此无法区分两者之间的区别。

我想了一些方法来区分:

  • 解析页面的源代码并存储所有 iframe src 属性的列表,假设如果加载的 url 是我列表中的其中之一,则它是一个 iframe。当然,如果它确实导航到该页面,那么这个假设可能是不正确的。
  • 与上面相同,但在页面上运行一些 JavaScript 并获取 iframe src 属性。
  • 使用 JavaScript,为用户尝试导航到页面时设置 Hook ,类似于 http://niw.at/articles/2009/02/06/how-to-enable-the-popup-window-on-uiwebview/en
  • 使用 JavaScript,在 iframe 尝试加载数据之前设置 Hook (不知道我会如何做这样的事情)。
  • 修改每个 iframe 的 src 属性,在其 src 属性末尾包含一个特殊字符串,例如“#iframe-加载”。使用修改后的源代码加载 UIWebView。虽然这仅适用于第一次查询时存在于原始页面上的 iframe,但不适用于动态加载的 iframe,例如通过 JavaScript。
  • 通过在 [webView:shouldStartLoadWithRequest:navigationType:] 事件中返回 YES 让页面正常加载,加载完成后,查看 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。

最佳答案

 (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

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

}

关于iphone - 如何区分 UIWebView 中 iframe 加载与整个页面加载之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1218493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com