UIWebView完成加载事件

39

在UIWebView(iPhone)完成加载URL后,是否可能启动事件?

如何找出UIWebView的当前URL?

4个回答

76

可以实现。使用 UIWebViewDelegate 协议并在您的代理中实现以下方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView

如果您想要URL,可以使用属性request获取最后一个请求:

webView.request.URL

抱歉打扰了一个已经结束的话题,但是(UIWebview *)webView,这里的webView是你的webview名称的输出口吗? - Cameron Tarbell
1
@CameronTarbell 这是一个委托方法,它将使用 webView 变量传递已完成加载的 Web 视图,与您的输出口名称无关。 - Pascal
好的,'webView' 变量可以更改为我的 Web 视图名称,对吗? - Cameron Tarbell
1
@CameronTarbell 这取决于情况,它只需要是一个 UIWebView,我不在意使用哪一个,然后在 webViewDidFinishLoad: 方法内最好直接使用该方法提供的变量(在我的示例中为 webView)。 - Pascal
如果网站有 iframe,怎么办?查看以下链接以获取更多信息:https://dev59.com/zE3Sa4cB1Zd3GeqPyMyn - Peacemoon

2

对我来说,找到的所有解决方案都没有起作用。

然后我发现了这个例子,它至少比我在Google / StackOverflow上找到的任何其他解决方案都要好得多。

uiwebview-load-completion-tracker


1

非常简单的方法:

步骤1:在头文件中设置代理UIWebViewDelegate

步骤2:添加以下webViewDidFinishLoad方法以获取当前webview的URL。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"Current URL = %@",webView.request.URL);

    //-- Add further custom actions if needed 
}

1
Pascal的答案对于“获取URL”部分是不错的。
然而!
来自苹果公司UIWebViewDelegate文档: "webViewDidFinishLoad:在网页视图完成加载框架后发送。"
框架≠页面。
当页面“完成加载”时,将调用webViewDidFinishLoad。在此之前它也可能被多次调用。从Amazon.com加载页面可能会生成十几个调用到webViewDidFinishLoad。
如果您控制页面源代码,则可以为其进行负载测试,并且对于该情况它将起作用。如果您只关心“在页面加载完成后被调用”,则webViewDidFinishLoad就足够了。
对于任意页面,具有任意JavaScript,永远加载广告横幅,或自动滚动横幅,或实现视频游戏,页面“完成加载”的想法是错误的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接