2011-07-28 78 views
11

加載mobile.twitter當我嘗試加載以下URL的網頁視圖所有我得到的是黑色的嘰嘰喳喳的背景負荷微調。頁面被加載,因爲WebViewClient.onPageFinished被調用。但是,在標準的Android瀏覽器中,頁面可以正常加載。問題的WebView

https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab 

我想微博改變了他們的移動網站,因爲這工作了一個月前。任何人遇到這個?

更新:啓用javascript mWebView.getSettings().setJavaScriptEnabled(true);

+2

沒錯這就是happenning對我們來說太......但是,只有我們的Nexus One的,舊的手機(魔術)似乎工作正常。 – Sirs

+2

我也在htc願望和nexus s上。 – scottyab

+0

是的,我們也有htc的願望 – pchap10k

回答

15

通過硬編碼的用戶代理iPhone的用戶代理修正了加載問題(我發現它製作的iPhone版應用程序)

mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3"); 

需要洗我的在這之後,一個骯髒的黑客手中。

+4

這很醜,但它對我們也很有用。 – Sirs

+2

在這種情況下,用戶將看到Twitter iPhone應用程序的鏈接。使用@chuckbjones的方法。 – FeelGood

14

略比使用iPhone的用戶代理不太髒,我能得到這個使用OG Droid的用戶代理字符串的工作:

webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"); 

這樣,你沒有得到像「下載iPhone特定文本新的Twitter應用程序的iPhone「在頁面上。

+3

工程就像一個魅力,感謝您的幫助。 – taf

19

那些確實是骯髒的黑客。更改用戶代理確實是一個討厭的解決方案,並應永遠來完成。當在web視圖加載twitter.com,你最好嘗試給那裏的一段代碼: https://stackoverflow.com/a/6625418/162178

對於懶惰的表決我會在這裏給它:

webView.getSettings().setDomStorageEnabled(true); 

所有學分去gregm,是誰給了這一個:)

編碼愉快!

編輯:只需稍作更新以證明這一選擇,用戶代理就是爲訪問網站提供有關誰是客戶的信息。 如果有一天Twitter做出專門針對Android的特殊更改,他們肯定會使用用戶代理來實現這一點。 如果你告訴他們你的iPhone或任何你可能永遠不會重定向或更簡單的事情,永遠不要得到特別爲Android設計的CSS。

和更政治問題,如果每個人都改變了它的用戶代理,網站的統計將是錯誤的,他們可能永遠也看不到有來他們的網站有很多機器人會的。 ^^ (可能考慮讓適當的更新到他們的網站)。這整個事情不僅僅是Twitter的網絡客戶端。所以很好。

本傑明的答案here似乎相當不錯(使用Java的反射,使之向後兼容,如果我是正確的)

再次這樣做不會改變用戶代理是爲您的應用程序和Web運行狀況非常糟糕。應該簡單地禁止任何代碼。謝謝:)

+0

工作完美!感謝您的鏈接=) – Alesqui

+0

我在這裏面臨一個問題。當我做webView.getSettings()。setDomStorageEnabled(true); ,然後首次調用loadURL for twitter,頁面沒有加載。但是,如果我再次調用webView.reload()或加載URL,它會從此開始twitter.com,直到我退出應用程序(或強制關閉設置)。再次從下次重新啓動,第一次沒有加載twitter。有沒有人遇到過這個問題? –

+0

@AlokKulkarni我看到第一次加載的頁面,但沒有顯示任何tweats,只顯示了4個不響應點擊的列表項(跟隨,關注者,收藏夾,列表)。刷新頁面顯示預期的推文列表,並在推文列表下面顯示這些列表的工作。我認爲mobile.twitter.com在第一個視圖中被打破了,但是它通過DOM存儲設置了一些html5標誌。 – larham1

2

繼MrBUBBLs回答,這樣的事情應該這樣做,而解決問題的Twitter管理向後兼容性:

// Hack to let mobile twitter work. From API 7 (Android 2.1) only 
try { 
    Method m = WebSettings.class.getMethod("setDomStorageEnabled", new Class[]{boolean.class}); 
    m.invoke(mWebView.getSettings(), true); 
} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {}