2011-07-21 39 views
34

Javascript如何檢測網站是在Android的股票瀏覽器中加載還是在另一個應用程序的WebView中加載?我想在這兩種情況下運行稍微不同的代碼。在Android瀏覽器或WebView內部檢測

+0

檢查webview用戶代理是否與Android股票瀏覽器不同。你可以通過訪問這個網站很容易地檢查它。 http://whatsmyuseragent.com/然而,我相當肯定用戶代理將完全相同,在這種情況下,我不知道。 – Caimen

+0

除非您是有問題的WebView的創建者。在這種情況下,我認爲你可以爲用戶代理放置任何你想要的東西。 – FoamyGuy

+2

如果你負責應用程序,你可以在加載頁面時發送一個特定的用戶代理,然後使用上面的Caimen的建議?使用[WebView的setUserAgentString](http://developer.android.com/reference/android/webkit/WebSettings.html#setUserAgentString(java.lang.String))函數,您可以設置特定的用戶代理,然後將用戶JavaScript檢測差異。 – mopsled

回答

50

活動 - >的onCreate

this.webView.getSettings().setUserAgentString(
    this.webView.getSettings().getUserAgentString() 
    + " " 
    + getString(R.string.user_agent_suffix) 
); 

RES - >值 - >的strings.xml

<string name="user_agent_suffix">AppName/1.0</string> 

的Javascript

function() isNativeApp { 
    return /AppName\/[0-9\.]+$/.test(navigator.userAgent); 
} 
+4

這是來自http://developer.android.com/guide/webapps/webview.html#EnablingJavaScript –

+0

的官方推薦方式@MarvinEmilBrach,如果您在web視圖中使用社交媒體身份驗證,則無法正常工作。它將失去Javascript界面​​ – user516883

+1

只有當你也是Android應用程序開發人員時,這是可行的,但如果你無法更改頁面將運行的應用程序源代碼,它將不起作用。當然,除非您聯繫應用程序開發人員,並且他們同意爲您在Android代碼中進行更改。 –

5

您可以檢查被請求,看它是否是從您的應用程序來的頁面上的服務器變量,並相應

if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") 
    echo 'var isAndroidApp=true;'; 
else 
    echo 'var isAndroidApp=false;'; 
  • 設置一個javascript變量,你的包名稱替換com.company.app