你说的相关函数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来重新格式化页面加载后,但我无法确定你会运行什么,你的解决方案会一样脆弱。
所以你想打开HTML版本 - 阻止整个URL是不可接受的?你有没有检查过你的web视图委托是否提供了webView:shouldStartLoadWithRequest:navigationType:在完成所有的http操作后,自定义的iTunes URL方案? – Tommy 2011-05-27 11:14:51
嗨汤米,谢谢你的评论。是的,我想加载HTML版本,所以用户将留在应用程序中。 shouldStartLoadWithRequest在html方案之后返回一个itms-apps方案。如果我在itms-apps方案的shouldStartLoadWithRequest中返回NO,那么它不会加载任何东西并返回didFailLoadWithError。你有什么建议吗? – 2011-06-06 08:38:26