Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免UIWebView加载iTunes应用程序_Javascript_Iphone_Objective C_Uiwebview_Uiwebviewdelegate - Fatal编程技术网

Javascript 避免UIWebView加载iTunes应用程序

Javascript 避免UIWebView加载iTunes应用程序,javascript,iphone,objective-c,uiwebview,uiwebviewdelegate,Javascript,Iphone,Objective C,Uiwebview,Uiwebviewdelegate,如何避免UIWebView在加载iTunes URL时打开iTunes应用程序 示例URL: 上面的URL直接加载iTunes应用程序。UIWebViewDelegate似乎无法控制这一点,只能在UIWebView中加载页面 它似乎是由JavaScript函数detectAndOpenItunes控制的;在页面的body标记中 有什么想法吗?你说得对,相关功能是detectAndOpenItunes,它包含在用户代理字符串中,并且要求“iPhone”或“iPod”在其中。我编写了一个带有web视

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

示例URL:

上面的URL直接加载iTunes应用程序。UIWebViewDelegate似乎无法控制这一点,只能在UIWebView中加载页面

它似乎是由JavaScript函数detectAndOpenItunes控制的;在页面的body标记中


有什么想法吗?

你说得对,相关功能是detectAndOpenItunes,它包含在用户代理字符串中,并且要求“iPhone”或“iPod”在其中。我编写了一个带有web视图的快速小测试应用程序,在viewDidLoad上只执行以下操作:

[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子类化,并通过添加您喜欢的任何协议处理程序。如果您将协议设计为执行HTTP请求,那么它将替换处理HTTP请求的内置方法。通过选择您接受或拒绝的请求,您可以通过允许您不希望的HTTP请求落入真正的协议处理程序来进行真正的加载。因此,您可以有选择地捕获和更改任何获取的文件,然后再将其传递到web视图

你可以用它来捕获和编辑你喜欢的.js和.html的任何部分,但是当苹果调整他们的页面时,你几乎肯定会遇到问题


类似地,您可以使用webview的stringByEvaluatingJavaScriptFromString:在加载后执行适当的Javascript来重新格式化页面,但我无法确定您将运行什么,您的解决方案也将同样脆弱。

所以您希望HTML版本打开-阻止整个URL是不可接受的?您是否检查过,在完成所有http操作后,是否为您的web视图代理提供了自定义iTunes URL方案的webView:shouldStartLoadWithRequest:navigationType:?嗨,Tommy,谢谢您的评论。是的,我希望加载HTML版本,这样用户将留在应用程序中。shouldStartLoadWithRequest在html方案之后返回itms应用方案。如果我在itms应用程序方案的shouldStartLoadWithRequest中返回NO,则它不会加载任何内容,并返回didFailLoadWithError。你有什么建议吗?谢谢!它工作得很好。我不知道我可以更改UserAgent。我将UIWebView与scalePageToFit一起使用,并禁用了用户交互。用户只需像查看图像一样查看整个页面。因此,这是一个很好的解决方案。通过用户默认密钥更改用户代理是我从StackOverflow中学到的东西,我曾在应用程序中使用过自己,从未发现过错误,但现在我正在寻找,我真的无法告诉你在官方文档中哪里可以找到授权。因此,它实际上可能值得采取一些谨慎措施。很抱歉,我没有提前进行研究,我现在正在研究……很抱歉,我复制了被接受的代码,并获得了blanc webview?我必须改变那里的任何东西才能让它工作?救命啊,我也遇到了同样的问题,这对我没用。也许我没有设置一个合适的用户代理。你能推荐一个阻止启动iTunes应用程序的用户代理吗?谢谢