2011-05-27 80 views
2

如何在加载iTunes URL时避免UIWebView打开iTunes应用程序?避免UIWebView加载iTunes应用程序

实例网址:http://itunes.apple.com/nl/app/bluppr-postcards/id348147229?mt=8

上面的网址直接加载在iTunes应用程序。 UIWebViewDelegate似乎无法控制此仅仅加载UIWebView中的页面。

它似乎是由JavaScript函数detectAndOpenItunes()控制的;在页面的body标签中。

任何想法?

+1

所以你想打开HTML版本 - 阻止整个URL是不可接受的?你有没有检查过你的web视图委托是否提供了webView:shouldStartLoadWithRequest:navigationType:在完成所有的http操作后,自定义的iTunes URL方案? – Tommy 2011-05-27 11:14:51

+0

嗨汤米,谢谢你的评论。是的,我想加载HTML版本,所以用户将留在应用程序中。 shouldStartLoadWithRequest在html方案之后返回一个itms-apps方案。如果我在itms-apps方案的shouldStartLoadWithRequest中返回NO,那么它不会加载任何东西并返回didFailLoadWithError。你有什么建议吗? – 2011-06-06 08:38:26

回答

5

你说的相关函数detectAndOpenItunes()包含在this file中,并且需要'iPhone'或'iPod'在用户代理字符串中。我写了一个快速小测试应用程序与Web视图,只是做在viewDidLoad中的以下内容:

[webView loadRequest: 
     [NSURLRequest requestWithURL: 
     [NSURL URLWithString: 
      @"http://itunes.apple.com/nl/app/bluppr-postcards/id348147229?mt=8"]]]; 

正如你所说,在打开的App Store应用。所以我把它修改为:

// set some user agent that doesn't have 'iPod' or 'iPhone' in the name 
[[NSUserDefaults standardUserDefaults] 
      registerDefaults:[NSDictionary 
         dictionaryWithObject:@"some old phone or other" 
         forKey:@"UserAgent"]]; 

[webView loadRequest: 
     [NSURLRequest requestWithURL: 
     [NSURL URLWithString: 
      @"http://itunes.apple.com/nl/app/bluppr-postcards/id348147229?mt=8"]]]; 

显示的页面为一个网页,而无需打开应用程序,但有与格式,显示的页面是太宽的问题。快速搜索var deviceDetect=,您会看到用户代理也用于确定格式。

我能想到的唯一解决方案基本上涉及屏幕抓取级别的行为。您可以继承NSURLProtocol,并通过+registerClass:添加您喜欢的任何协议处理程序。如果你设计你的协议来执行HTTP请求,那么它会替换内置的处理HTTP请求的方法。通过选择性地接受或拒绝请求,您可以通过允许您不想要的HTTP请求落入真正的协议处理程序来进行实际加载。因此,您可以选择性地捕获和更改任何获取的文件,然后将其传递到Web视图。

您可以使用它来捕捉和编辑您喜欢的任何.js和.html位,但每当Apple调整其页面时,您几乎都会遇到问题。

同样,你可以使用webview的stringByEvaluatingJavaScriptFromString:来执行合适的Javascript来重新格式化页面加载后,但我无法确定你会运行什么,你的解决方案会一样脆弱。

+0

谢谢!它效果很好。我不知道我能够更改UserAgent。我使用带有scalePageToFit的UIWebView并禁用了用户交互。用户只需要像整个图像一样看整个页面。所以这是一个很好的解决方案。 – 2011-06-06 12:36:32

+0

通过用户默认密钥更改用户代理是我从StackOverflow中学到的东西,已经用于运输应用程序并且从未发现过错,但现在我正在寻找我真的无法告诉您您可以在哪里在官方文件中找到它的权力。所以它可能实际值得谨慎使用。对不起,我事先没有进行研究,现在正在研究它... – Tommy 2011-06-06 14:54:30

+0

对不起,但我没有复制的代码接受,我得到一个blanc webview?我必须改变那里的任何事情才能得到它的作品?帮助PLZ ..我得到同样的问题。 – hafedh 2011-12-22 15:14:53