2011-05-27 85 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