你一直在寻找的是
– webView:decidePolicyForNavigationAction:request:frame:decisionListener:
这是WebPolicyDelegate
协议的一部分。
阅读 的文档WebPolicyDelegate
,尤其是有关此委托方法的讨论。的文档WebPolicyDecisionListener
描述了您可以发送给侦听器的消息。您可以在此委托方法中识别重定向,并且可以指示决策侦听器使用或忽略它。
编辑:
我很欣赏这 50 分,但如果我没有帮助你解决问题,我认为我不应该得到它们,这足以促使我坐下来尝试你的问题。
我构建了一个小型应用程序,它不是基于文档的,或者使用 ARC 或垃圾收集。我在 MainMenu.xib 文件中关闭了 Auto Layout,并在其中简单地放置了一个 WebView 实例。我修改了 AppDelegate 以包含 WebView 实例的出口。
然后我像这样创建了充实的-applicationDidFinishLaunching:
存根:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *urlString = @"http://drive.google.com";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[[[self webView] mainFrame] loadRequest:urlRequest];
}
如果我收到重定向,它们似乎不会影响我显示页面的能力。
我们是否在同一页上(没有双关语)?
编辑2:
好消息(或坏消息,取决于你的 POV):重定向从来都不是问题(尽管它们确实有助于阐明真正发生的事情)。
谈到 Google Drive,WebView 不是经过批准的浏览器。但是,您可以通过修改用户代理字符串来解决这个问题(注意,如下)。这是修改后的代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *urlString = @"http://drive.google.com";
NSURL *url = [NSURL URLWithString:urlString];
NSString *customUserAgent = [NSString stringWithFormat:@"%@ Version/6.0.2 Safari/8536.26.17", [[self webView] userAgentForURL:url]];
[[self webView] setCustomUserAgent:customUserAgent];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[[[self webView] mainFrame] loadRequest:urlRequest];
}
注意:用户界面看起来功能齐全,但即便如此,谷歌可能会改变其确定浏览器是什么的方式并破坏此方案,因此请考虑自己警告。您可能想探索他们的 SDK 以获得访问 Google Drive 的可能替代方法。
一如既往,祝您工作顺利。