2011-11-27 51 views
1

我試圖以通常的方式傳遞參數在NSURL文件路徑:如何參數傳遞給fileURL

(fileURL)?arg1=val1&arg2=val2 

的問題是,我一直從UIWebView收到以下錯誤:

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

當我刪除參數後綴一切工作完美。蘋果狀態的文檔,該方法

+(ID)fileURLWithPath:(的NSString *)路徑

是這樣工作的:"path: The path that the NSURL object will represent. path should be a valid system path..."

是否有可能的參數添加到fileURL?如果是這樣,我該怎麼做?

順便說一句,我成功做到這一點,如果我嘗試從JavaScript調用的一個UIWebView加載與參數本地URL文件:

document.location = url; 

我試圖找到從本地代碼的解決方案......

+0

你可以NSLog從fileURLWithPath的輸出嗎?如果你在傳入的路徑中添加了參數,NSURL可能會轉義'?'字符以使其成爲URL的一部分。 – joerick

+0

**路徑**:xxxxxxx?arg1 =東西 ** fileURLWithPath輸出**:xxxxxxxxxx%3Farg1 =東西 –

回答

0

您是否嘗試過使用片段?它是#符號後的URL部分。這部分不會發送到服務器,所以不應該干擾路徑,但頁面上的JavaScript仍然可以讀取它。

+0

您的意思是,將#添加到路徑的末尾?如果是的話會有問題,因爲路徑必須是文件系統上的實際文件路徑...無論如何,我想保持?arg1 = val1&arg2 = val2的約定,因爲我在代碼中有其他部分,有種行爲 –

3

好吧,我看到你的問題。您不能將?arg1=something&arg2=...添加到路徑中,因爲可能有一個類似這樣的文件,所以NSURL會轉義?字符以確保它用作路徑,而不是查詢字符串的一部分(?之後的任何內容都稱爲查詢在一個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]];