获取UIWebView的当前URL


110

我已经尝试使用以下方法获取我的当前网址UIWebViewwebview.request.URL。不幸的是,那NSURL是空的。这里有什么问题吗?我正在使用Xcode 3.2.2 beta 5。

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


执行该代码currentURL = currentWebView.request.URL.absoluteString; 加载Web视图后,请使用-(void)webViewDidFinishLoad:(UIWebView *)webView。也许这可能有所帮助。
Xcoder 2014年

OP,考虑到这个问题有78,000的观点,这是一个被很好引用的观点。您介意为投票率更高的答案更新可接受的答案,以防止将来造成混淆吗?谢谢!
艾伯特·伦肖

Answers:


45

Matt的版本要干净得多。我建议大家使用那个代替这个

您可以尝试以下方法:

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

谢谢。我的上述代码在didFinishLoad中执行时有效。...在某些地方,我了解到js版本并非在每个页面上都适用。但是我会尽力的。
danielreiser

11
马特(Matt)的版本要干净得多。所以,是的,我建议每个人都使用那个而不是这个。
伦格斯2012年

1
这是它在m.youtube.com中起作用的唯一方法。所有其他答案都返回错误的URL。
cprcrack

2
我实际上评估的是“ document.URL”,而不是“ window.location”(对我而言总是空白)。这对于在可能不使用传统页面加载的JS重载网站上内部调整页面URL很有用。
SmartyP 2014年

1
对于上面的两个人-Aubada Taljo和Taranfx-Rengers相当大胆地指出(字面意思是粗体),谦虚地指出人们应该使用Matt的版本,下面要有230多个赞。显然,在回答此问题时,它起作用并被接受,有30多个人认为它也起作用。这是5.5岁。好东西,雷格斯。感谢您向人们指出以下Matt的答案。
应用开发人员2015年

317

通过JS的window.location对我来说并不可靠,但是这样做:

currentURL = currentWebView.request.URL.absoluteString;

图片来源:http//mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
如果您的网站将在其他请求中加载一些广告,则您将获得错误的网址。更清晰的变体由Mark Sands
OdNairy

不适用于Google的搜索结果。从Google访问搜索结果时,它向我显示了Google URL,而不是搜索结果页面URL。任何帮助.........
Nirav Gadhiya

@iOSDeveloper Google可能使用“ HTML5”推送状态来操作不涉及执行另一个请求的URL(因此currentWebView.request不会更新)。
danw 2013年

3
如果网站执行了history.pushState
andrrs,2015年

1
在Swift 4中:webView.request?.mainDocumentURL?.absoluteString
DmitryKanunnikoff

55

这是每次您导航到Web视图中的其他链接时用于获取网址的代码:

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

当我尝试此方法时,永远不会调用该方法。我有什么想念的吗?
格雷格

1
@greg确保将自己设置为UIWebView的委托
bentytree'3的3'3

1
这对我来说很有效,当我webView.request.URL.absoluteString回来的时候nil
bentytree'3

谢谢,这对我也很有效,它比currentWebView.request.URL.absoluteString好;
web hobbit

36

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

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

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


2
谢谢SarahR,即使UIWebView只是部分加载了页面,您的方法仍然有效。
德米特里·马卡连科

18

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

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

但是,以下代码可以获取URL,但该URL可能不是当前URL:

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

正确的是:

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

8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}

4

在iPhone上对Google搜索结果进行了尝试:

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

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


3

这是我使用的代码:

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

5
您是通过从现有的NSURL获取字符串来创建NSURL的。你不能复制webView.request.URL吗?
Pascal


2

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



2

实现委托方法

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

URL是您真正需要的。



1

获取WKWebView和UIWebview的当前URL

这是代码。

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.