【问题标题】:How to pass arguments to fileURL如何将参数传递给 fileURL
【发布时间】:2012-01-07 08:05:13
【问题描述】:

我正在尝试以通常的方式在文件路径的 NSURL 中传递参数:

(fileURL)?arg1=val1&arg2=val2

问题是我不断从UIWebView 收到以下错误:

Failed to load webpage with error: The requested URL was not found on this server.

当我删除参数后缀时,一切正常。 Apple 上的文档说明该方法

+ (id)fileURLWithPath:(NSString *)path

像这样工作:"path: The path that the NSURL object will represent. path should be a valid system path..."

是否可以将参数添加到 fileURL?如果是这样,我该怎么做?

顺便说一句,如果我尝试使用 Javascript 调用从 UIWebView 加载带有参数的本地 URL 文件,我就成功了:

document.location = url;

我尝试从本机代码中找到解决方案...

【问题讨论】:

  • 你能 NSLog 来自 fileURLWithPath 的输出吗?如果您在此处传递附加参数的路径,则 NSURL 可能会转义 ? 字符以使其成为 URL 的一部分。
  • path: xxxxxxx?arg1=something fileURLWithPath 输出: xxxxxxxxxx%3Farg1=something

标签: iphone ios nsurl


【解决方案1】:

好的,我明白你的问题了。您不能将?arg1=something&arg2=... 添加到路径中,因为可能有一个这样命名的文件,因此 NSURL 转义了 ? 字符以确保它用作路径,而不是查询字符串的一部分(@ 之后的任何内容987654323@ 在 URL 中称为查询)。

要正确执行此操作,您需要通过提供正确转义的字符串来设置 URL。

NSString *path = @"/Users/mike/file.html"; 
NSString *query = @"option1=5&option2=hello"; // for example

NSString *encodedPath = [path stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@?%@",
                                   encodedPath,
                                   query]];

【讨论】:

    【解决方案2】:

    您是否尝试过使用片段?它是# 符号之后的URL 部分。这部分永远不会发送到服务器,所以不应该干扰路径,但页面上的javascript仍然可以读取它。

    【讨论】:

    • 你的意思是,在路径末尾添加#??如果是这样,就会出现问题,因为路径必须是文件系统上的实际文件路径......无论如何,我想保持 ?arg1=val1&arg2=val2 的约定,因为我在代码中有其他部分期望这个一种行为
    猜你喜欢
    • 2020-10-09
    • 2012-12-21
    • 2014-05-03
    • 2015-06-26
    • 2012-01-18
    • 2017-07-14
    • 2018-03-08
    • 2020-09-01
    • 2018-03-20
    相关资源
    最近更新 更多