避免UIWebView加载iTunes应用程序
Avoid UIWebView load iTunes App
如何避免UIWebView在加载iTunes URL时打开iTunes应用程序?
示例URL:http://itunes.apple.com/nl/app/bluppr-postcards/id348147229?mt=8
上面的URL直接加载iTunes应用程序。UIWebViewDelegate似乎无法控制这一点,只能在UIWebView中加载页面。
它似乎是由JavaScript函数detectAndOpenItunes()控制的;在页面的正文标记中。
有什么想法吗?
您说得对,相关函数是detectAndOpenItunes(),它包含在该文件中,要求用户代理字符串中包含"iPhone"或"iPod"。我写了一个快速的小测试应用程序,它有一个web视图,在查看DidLoad时只做以下操作:
[webView loadRequest:
[NSURLRequest requestWithURL:
[NSURL URLWithString:
@"http://itunes.apple.com/nl/app/bluppr-postcards/id348147229?mt=8"]]];
正如你所说,这将打开应用商店应用程序。所以我把它修改成:
// 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的任何部分,但每当苹果调整页面时,你肯定会遇到问题。
类似地,您可以使用webview的stringByEvaluatingJavaScriptFromString:
来执行合适的Javascript,以便在加载后重新格式化页面,但我无法确定您将运行什么,您的解决方案也同样脆弱。
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在ios Cordova应用程序中打开iTunes窗口
- Twitter Bootstrap 主题和 iTunes 应用程序标题
- a: 访问的dons'当链接打开iTunes应用程序时,无法在平板电脑上工作
- 如何从浏览器启动windows应用程序,如“在itunes中查看”
- 如何为应用程序截图创建一个漂亮的水平滚动区域,就像iTunes上的应用程序一样
- 是否有可能通过应用程序控制iTunes(让它播放暂停的歌曲)?
- 避免UIWebView加载iTunes应用程序