【问题标题】:Get current URL of UIWebView获取 UIWebView 的当前 URL
【发布时间】:2011-01-30 06:56:39
【问题描述】:

我已经尝试使用:webview.request.URL 获取我的UIWebView 的当前 URL。 不幸的是,NSURL 是空的。这里有什么问题吗?我正在使用 Xcode 3.2.2 beta 5。

上面的代码应该在UIWebView委托didStartLoad中执行。

【问题讨论】:

  • 执行该代码 currentURL = currentWebView.request.URL.absoluteString;在您的网络视图加载后,请使用 - (void)webViewDidFinishLoad:(UIWebView *)webView。也许这可能会有所帮助。
  • OP,考虑到这个问题有 78k 的浏览量,它是一个很好的参考。您是否介意将已接受的答案更新为投票率更高的答案,以防止将来出现混淆?谢谢!

标签: ios iphone url request uiwebview


【解决方案1】:

通过 JS 的 window.location 对我来说不能可靠地工作,但这样做:

currentURL = currentWebView.request.URL.absoluteString;

信用: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html

【讨论】:

  • 如果您的网站将在其他请求中加载一些广告,您将获得不正确的网址。 Mark Sands 写的更清晰的变体
  • 不适用于google的搜索结果。从谷歌访问搜索结果时,它显示的是谷歌网址而不是搜索结果页面网址。任何帮助............
  • @iOSDeveloper Google 可能使用“HTML5”推送状态来操作不涉及执行另一个请求的 URL(因此 currentWebView.request 没有更新)。
  • 如果网站做了history.pushState,这个方法似乎不起作用
  • 在 Swift 4 中:webView.request?.mainDocumentURL?.absoluteString
【解决方案2】:

这是我每次导航到 webview 中的不同链接时用来获取 url 的代码:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

【讨论】:

  • 当我尝试这个时,该方法永远不会被调用。有什么我可能会错过的吗?
  • @greg 确保您将自己设置为 UIWebView 的代表
  • 这对我有用,而 webView.request.URL.absoluteString 返回 nil
  • 谢谢,这对我也有用,而且比 currentWebView.request.URL.absoluteString;
【解决方案3】:

Matt's version 更干净。推荐大家用that一个代替这个

你可以试试这个:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

【讨论】:

  • 谢谢。我上面的代码在 didFinishLoad 中执行时可以工作。在某处我读到 js 版本并非在每个页面上都有效。不过我会试试的。
  • Matt 他的版本更干净。所以是的,我建议每个人都使用那个而不是这个。
  • 这是唯一的工作方式,例如在 m.youtube.com 中。所有其他答案都返回错误的 URL。
  • 我实际上评估的是“document.URL”而不是“window.location”(这对我来说总是空白)。这对于在可能不使用传统页面加载的 JS 繁重网站上对页面 URL 进行内部调整很有用。
  • 对于上面的两个人 - Aubada Taljo 和 Taranfx - Rengers 非常大胆(字面意思是粗体字)和谦虚地指出,人们应该使用 Matt 的版本,在下面有超过 230 个赞。很明显,在回答这个问题时,它有效并被接受,30 多人认为它也有效。现在已经5.5岁了。好东西,伦格斯。感谢您在下面向人们指出马特的答案。
【解决方案4】:

我也发现上面批准的答案不可靠。 但稍作修改,似乎每次都能正常工作:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

请注意在 Javascript 中添加了“.href”,因为它隐藏在代码行的末尾。

【讨论】:

  • 感谢 SarahR,即使 UIWebView 仅部分加载了页面,您的方法也有效。
【解决方案5】:

这是不正确的,将返回 nil:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

但是,下面的代码可以得到一个URL,但是这个url可能不是当前的URL:

NSString *url = _webView.request.URL.absoluteString;

正确的是:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

【讨论】:

    【解决方案6】:
    - (void)webViewDidFinishLoad:(UIWebView *)webView{
         NSURL *currentURL = [[webView request] URL];
         NSLog(@"%@",[currentURL description]);
    
    }
    

    【讨论】:

      【解决方案7】:

      在 iPhone 上尝试过 google 搜索结果:

       NSString* currentURL = webView.request.URL.absoluteString;
       NSString* mainDocumentURL = webView.request.mainDocumentURL.absoluteString;
      

      两者都返回相同的字符串!

      【讨论】:

        【解决方案8】:

        这里是我使用的代码:

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
        

        【讨论】:

        • 您正在通过从现有 NSURL 获取字符串来创建 NSURL;你不能直接复制webView.request.URL吗?
        【解决方案9】:

        由于 UIWebView 已被弃用,WKWebview 获取当前 url 非常简单。

        webView.url
        

        【讨论】:

          【解决方案10】:

          我使用shouldStartLoadWithRequest 事件 (UIWebViewDelegate) 来捕获 URL 更新。 request.mainDocumentURL.absoluteString 将为您提供主网页的 URL(通常是您想要的),而 request.URL.absoluteString 将包含 CSS 和 JavaScript。

          【讨论】:

            【解决方案11】:

            这总是有效的。 .

            NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
            

            【讨论】:

              【解决方案12】:

              实现委托方法,

              - (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
              {
                  NSString  *URL = request.URL.absoluteString;    NSLog(@"%@",URL);
              }
              

              URL 正是您所需要的。

              【讨论】:

                【解决方案13】:

                在 Swift 试试这个,

                func webViewDidFinishLoad(webView: UIWebView){
                    println(WebView.request?.mainDocumentURL)
                }
                

                【讨论】:

                  【解决方案14】:

                  获取 WKWebView 和 UIWebview 的当前 URL

                  这是代码。

                  if (self.wkWebView) {
                     NSString  *URL = self.wkWebView.title;
                  }else if(self.uiWebView) {
                     NSString *URL = self.uiWebView.request.title;
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-09-10
                    • 2019-05-20
                    • 2023-03-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-11-12
                    • 2014-11-27
                    相关资源
                    最近更新 更多