Как загрузить NSURL, который содержит хеш-фрагмент "#" с UIWebView? - PullRequest
10 голосов
/ 14 июля 2011

Учитывая локальный URL-адрес, такой как index.html

Теперь мне нужно использовать UIWebView, чтобы загрузить его в iPad.Я выполнил следующие действия:

  1. Создать NSURL

    NSURL *url = [NSURL fileURLWithPath:@"http://mysite.com#page1"];
    
  2. Загрузка с UIWebView для локального HTML / JS / CSS и т. Д.

    [webView loadRequest:[NSURLRequest requestWithURL:url]];
    

Но это не работает, потому что "#" преобразуется в "% 23", поэтому строка URL-адреса

http://mysite.com%23page1

MyВопрос в том, как исправить эту проблему с автоматическим преобразованием и разрешить UIWebView обращаться к URL-адресу, который содержит фрагмент хеша "#"?

Ответы [ 4 ]

11 голосов
/ 23 августа 2011

Пользователь URLWithString , чтобы добавить фрагмент к вашему URL, например:

*NSURL *url = [NSURL fileURLWithPath:htmlFilePath];
url = [NSURL URLWithString:[NSString stringWithFormat:@"#%@", @"yourFragmentHere"] relativeToURL:url];*

Надеюсь, это поможет:)


РЕДАКТИРОВАТЬ: Swift 3 версия:

var url = URL(fileURLWithPath: htmlFilePath)
url = URL(string: "#yourFragmentHere", relativeTo: url)
3 голосов
/ 07 августа 2015

для справки в swift:

let path = NSBundle.mainBundle().pathForResource("index", ofType: "html", inDirectory: "web")
var url = NSURL(fileURLWithPath: path!)
url = NSURL(string: "#URL_FRAGMENT", relativeToURL: url!)
let request = NSURLRequest(URL: url!)
self.webView.loadRequest(request)
1 голос
/ 24 апреля 2017

Для быстрого 3 решение 1: Вы можете вызвать эту строку после загрузки веб-просмотра

webView.stringByEvaluatingJavaScript(fromString: "window.location.href = '#myHashtag'")

решение 2: также, если вы хотите загрузить напрямую, используйте это

webView1.loadRequest(URLRequest(url: URL(string: url! + "#myHashtag")!))

ObjC: решение 1:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

[webView stringByEvaluatingJavaScriptFromString: @ "window.location.href = '#myHashtag';"];}

решение2:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat: @"%@#myHashtag",myURL]]]];
1 голос
/ 15 июля 2011

Это не загрузка в веб-представлении, потому что вы используете неправильный метод для создания объекта NSURL, fileURLWithPath используется для системного пути. Используйте это -

NSURL *url = [NSURL URLWithString:@"http://mysite.com#page1"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[webView loadRequest:request];

Подробнее о NSURL читайте в документации -

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html

...