Obtenha o URL atual de UIWebView

110

Eu já tentei obter a URL atual da minha UIWebViewcom: webview.request.URL. Infelizmente, o NSURLestava vazio. Alguma coisa errada aqui? Estou trabalhando com o Xcode 3.2.2 beta 5.

O código acima deve ser executado no UIWebViewdelegado didStartLoad.

danielreiser
fonte
Faça esse código currentURL = currentWebView.request.URL.absoluteString; depois que sua visualização da web for carregada, use - (void) webViewDidFinishLoad: (UIWebView *) webView. Talvez isso ajude.
Xcoder
OP, considerando que esta questão tem 78k visualizações, é uma bem referenciada. Você se importaria de atualizar a resposta aceita para a mais votada para evitar confusão futura? Obrigado!
Albert Renshaw de

Respostas:

45

A versão de Matt é muito mais limpa. Eu recomendo a todos que usem esse em vez deste

Você pode tentar isto:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];
Rengers
fonte
Obrigado. Meu código acima funciona ao executar em didFinishLoad .... Em algum lugar li que a versão js não funciona em todas as páginas. Mas eu tentarei.
danielreiser
11
Matt, sua versão é muito mais limpa. Então, sim, eu recomendo a todos que usem esse em vez deste.
Rengers
1
Só assim funciona, por exemplo em m.youtube.com. Todas as outras respostas retornam URLs errados.
cprcrack
2
Na verdade, avalio "document.URL" e não "window.location" (que sempre estava em branco para mim). Isso é útil para ajustes internos ao URL da página em sites pesados ​​de JS que podem não usar carregamentos de página tradicionais.
SmartyP de
1
Para as duas pessoas acima - Aubada Taljo e Taranfx - Rengers observou com bastante ousadia (literalmente, o texto está em negrito) e humildemente que as pessoas deveriam usar a versão de Matt com mais de 230 curtidas abaixo. Claramente, na hora de responder isso, funcionou e foi aceito e mais de 30 pessoas acharam que funcionava também. Isso agora tem 5,5 anos. Muito bom, Rengers. Obrigado por apontar as pessoas para a resposta de Matt abaixo.
App Dev Guy
317

window.location via JS não funcionou de maneira confiável para mim, mas funcionou:

currentURL = currentWebView.request.URL.absoluteString;

Crédito: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html

Matt Andersen
fonte
9
Você obterá url incorreto se o seu site carregar alguns anúncios em outra solicitação. Variante mais clara escrita porMark Sands
OdNairy
não funciona para resultados de pesquisa do google. Ao acessar os resultados de pesquisa do Google, ele está me mostrando o URL do Google, não o URL da página de resultados da pesquisa. Qualquer ajuda .........
Nirav Gadhiya
@iOSDeveloper O Google provavelmente usa o estado de push "HTML5" para manipular o URL que não envolve a execução de outra solicitação (portanto, currentWebView.request não é atualizado).
danw 01 de
3
Este método não parece funcionar se o site tiver feito um history.pushState
andrrs
1
Em Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff
55

aqui está o código que uso para obter o url sempre que você navegar para um link diferente no webview:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}
Mark Sands
fonte
quando tento fazer isso, o método nunca é chamado. Existe algo que eu poderia estar perdendo?
Greg
1
@greg certifique-se de definir a si mesmo como o delegado do UIWebView
bendytree
1
isso funcionou para mim enquanto webView.request.URL.absoluteStringvoltavanil
bendytree
Obrigado, isso funcionou para mim também e é melhor do que currentWebView.request.URL.absoluteString;
web hobbit
36

Eu também descobri que a resposta aprovada acima não era confiável. Mas com uma pequena modificação, parece funcionar sempre:

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

Observe a adição de ".href" ao Javascript, pois está oculto no final da linha de código.

SarahR
fonte
2
Obrigado SarahR, seu método funciona mesmo se UIWebView carregou uma página apenas parcialmente.
Dmitry Makarenko
18

Isso não está correto e retornará nulo:

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

No entanto, o código abaixo pode obter um URL, mas o url pode não ser o URL atual:

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

O correto é:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
DD
fonte
8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}
Sivasankar
fonte
4

Tentei isso para resultados de pesquisa do Google no iPhone:

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

Ambos retornam a mesma string!

Alex Stone
fonte
3

aqui o código que eu uso:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
Bobj-C
fonte
5
Você está criando um NSURL obtendo a string de um NSURL existente; você não poderia apenas copiar webView.request.URL?
Pascal
3

Como o UIWebView está obsoleto, o WKWebview para obter o url atual é muito simples.

webView.url
Kris Roofe
fonte
2

Eu uso o shouldStartLoadWithRequestevento (UIWebViewDelegate) para capturar atualizações de URL. request.mainDocumentURL.absoluteStringobterá o URL da página principal da web (que normalmente é o que você deseja), enquanto request.URL.absoluteStringincluirá CSS e JavaScript inclui.

Tom Söderlund
fonte
2

Isso sempre funciona. .

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

implementar o método delegado,

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

URL é exatamente o que você precisava.

Gobi M
fonte
1

IN Swift tente isso,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}
Mohammad Zaid Pathan
fonte
1

Para obter o URL atual de WKWebView e UIWebview

Aqui está o código.

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