你說的相關函數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