Вы правы, что релевантной функцией является DeteAndOpenItunes (), которая содержится в этом файле и требует, чтобы в строке агента пользователя было указано «iPhone» или «iPod».Я написал небольшое тестовое приложение с веб-представлением, которое выполняет только следующее при 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-запросам, которые вы не хотите, переходить в настоящий обработчик протокола.Следовательно, вы можете выборочно перехватывать и изменять любой извлеченный файл, прежде чем разрешить его передачу в веб-представление.
Вы можете использовать это для отлова и редактирования любых битов .js и .html, которые вам нравятся, но затем выВы, скорее всего, будете сталкиваться с проблемами всякий раз, когда Apple корректирует свою страницу.
Точно так же вы можете использовать stringByEvaluatingJavaScriptFromString:
webview для запуска подходящего Javascript для переформатирования страницы после загрузки, но я не могу точно определить, что именно выбудет работать, и ваше решение будет столь же хрупким.