我們正在爲iOS開發混合應用程序。大部分應用程序都是在UIWebView中運行的WebApp。有時需要應用程序的本機部分修改URL,添加一些參數。我知道我們可以使用「替代」解決方案(例如獨立於Web視圖的本地應用與服務器對話);不過,我主要對URL擴充的一個好的安全解決方案感興趣。什麼是最好(最安全)的方式來增加UIWebView使用的URL?
我一直在尋找「最好」的技術來做到這一點,並發現兩個似乎(主要)工作。
技術#1 - 重新初始化URL
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"GOTO: %@", [[request URL] absoluteString]);
NSURL * oldurl = request.URL;
[[request URL] initWithString:[NSString stringWithFormat:@"%@&newParam=dave", [oldurl absoluteString]]];
return YES;
}
技術#2 - 拒絕該第一URL和子在一個新
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL * oldurl = request.URL;
if ([self isFixed:oldurl]) {
return YES;
} else {
NSURL * newurl = [NSURL URLWithString:[NSString stringWithFormat:@"%@&newParam=dave", [oldurl absoluteString]]];
[theWebView loadRequest:[NSURLRequest requestWithURL:newurl]];
return NO;
}
}
技術#2似乎會在某些頁面上導致文物(「iFrame加載中斷」,可能還有其他問題)。
我很好奇,如果其他人已經做了像這樣的網址替換,或通過其他技術,或者如果任何人都知道技術#1(我希望使用)的問題。
我知道方法swizzling不推薦,並且Apple的文檔建議不要繼承UIWebView的子類。
謝謝!
UPDATE 哎呀 - 技術#1實際上沒有工作。我的實際代碼做得比我發佈的還要多,而且它似乎只能工作......這可能是個好消息,因爲我希望它有點邪惡。
如果你想添加一個參數到一個URL這個代碼是更堅實一點:http://stackoverflow.com/questions/7026916/passing-arguments-into-url-string-objective-c/7027608#7027608 – Jano
啊,我會試一試這些技巧。有一點擔心,那個職位沒有被接受的解決方案。 – Dave
@Jano,謝謝你的建議;然而,你的其他答案是簡單地製作一個新的URL。我需要做的是更新將被UIWebView使用的URL。 – Dave