我们正在为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