如何使用UIWebView加载包含散列片段“#”的NSURL?

时间:2011-07-14 10:06:16

标签: nsurl

给出一个像index.html

这样的本地URL地址

现在我需要使用UIWebView在iPad中加载它。我按照以下步骤操作:

  1. 创建NSURL

    NSURL *url = [NSURL fileURLWithPath:@"http://mysite.com#page1"];
    
  2. 使用UIWebView加载本地HTML / JS / CSS等

    [webView loadRequest:[NSURLRequest requestWithURL:url]];
    
  3. 但它不起作用,因为“#”转换为“%23”,所以URL字符串是

    http://mysite.com%23page1

    我的问题是,如何修复此自动转换问题并让UIWebView访问包含散列片段“#”的网址?

4 个答案:

答案 0 :(得分:11)

用户 URLWithString 将片段附加到您的网址,如下所示:

*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)

答案 1 :(得分:3)

在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)

答案 2 :(得分:1)

它没有在Web视图中加载,因为您使用了错误的方法来创建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

答案 3 :(得分:1)

对于swift 3 解决方法1: 您可以在加载webview后调用此行

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

溶液2: 如果你想直接加载使用这个

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

<强> ObjC: 解决方案1:

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

[webView stringByEvaluatingJavaScriptFromString:@&#34; window.location.href =&#39;#myHashtag&#39;;&#34;]; }

溶液2:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat: @"%@#myHashtag",myURL]]]];