2014-09-05 55 views
3

我希望以便檢測我的應用程序正在運行,主要是我想看看它是否正在運行,並且用戶代理:DART用戶代理檢測

  1. Chrome封裝應用,
  2. Chrome瀏覽器頁面,
  3. Android的web視圖
  4. 火狐

我運行此代碼,爲出發:

var ua = window.navigator.userAgent; 
print(ua); 

,並得到了這個輸出線

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.76 (Dart) Safari/537.36 

但實際上我用DARTIUM運行它,並有鍍鉻/火狐/ IE11

任何想法!

+1

這是預期。您應該閱讀[用戶代理字符串](http://en.wikipedia.org/wiki/User_agent)。 – 2014-09-05 15:11:34

+1

我自己還沒有使用它,但https://pub.dartlang.org/packages/browser_detect可能會有所幫助。 – 2014-09-05 15:15:03

回答

0

https://chromium.googlesource.com/external/dart/+/master/dart/sdk/lib/html/html_common/device.dart

/** 
* Utils for device detection. 
*/ 
class Device { 
    static bool _isOpera; 
    static bool _isIE; 
    static bool _isFirefox; 
    static bool _isWebKit; 
    static String _cachedCssPrefix; 
    static String _cachedPropertyPrefix; 
    /** 
    * Gets the browser's user agent. Using this function allows tests to inject 
    * the user agent. 
* Returns the user agent. 
    */ 
    static String get userAgent => window.navigator.userAgent; 
    /** 
    * Determines if the current device is running Opera. 
    */ 
    static bool get isOpera { 
    if (_isOpera == null) { 
     _isOpera = userAgent.contains("Opera", 0); 
    } 
    return _isOpera; 
    } 
    /** 
    * Determines if the current device is running Internet Explorer. 
    */ 
    static bool get isIE { 
    if (_isIE == null) { 
     _isIE = !isOpera && userAgent.contains("Trident/", 0); 
    } 
    return _isIE; 
    } 
    /** 
    * Determines if the current device is running Firefox. 
    */ 
    static bool get isFirefox { 
    if (_isFirefox == null) { 
     _isFirefox = userAgent.contains("Firefox", 0); 
    } 
    return _isFirefox; 
    } 
    /** 
    * Determines if the current device is running WebKit. 
    */ 
    static bool get isWebKit { 
    if (_isWebKit == null) { 
     _isWebKit = !isOpera && userAgent.contains("WebKit", 0); 
    } 
    return _isWebKit; 
    } 
    /** 
    * Gets the CSS property prefix for the current platform. 
    */ 
    static String get cssPrefix { 
    String prefix = _cachedCssPrefix; 
    if (prefix != null) return prefix; 
    if (isFirefox) { 
     prefix = '-moz-'; 
    } else if (isIE) { 
     prefix = '-ms-'; 
    } else if (isOpera) { 
     prefix = '-o-'; 
    } else { 
     prefix = '-webkit-'; 
    } 
    return _cachedCssPrefix = prefix; 
    } 
    /** 
    * Prefix as used for JS property names. 
    */ 
    static String get propertyPrefix { 
    String prefix = _cachedPropertyPrefix; 
    if (prefix != null) return prefix; 
    if (isFirefox) { 
     prefix = 'moz'; 
    } else if (isIE) { 
     prefix = 'ms'; 
    } else if (isOpera) { 
     prefix = 'o'; 
    } else { 
     prefix = 'webkit'; 
    } 
    return _cachedPropertyPrefix = prefix; 
    } 
    /** 
    * Checks to see if the event class is supported by the current platform. 
    */ 
    static bool isEventTypeSupported(String eventType) { 
    // Browsers throw for unsupported event names. 
    try { 
     var e = new Event.eventType(eventType, ''); 
     return e is Event; 
    } catch (_) { } 
    return false; 
    } 
} 
3

Dartium將自己標識爲Chrome,但在用戶代理中包含'(Dart)'。

,如果你的代碼運行的瀏覽器擴展程序/應用程序通過檢查chrome.runtime.id,你可以告訴例如:

// You'll likely need to reference this package: 
// https://pub.dartlang.org/packages/chrome 
if (window.chrome && window.chrome.runtime && window.chrome.runtime.id) { 
    window.alert('App!'); 
} 

如果您在Android應用程序的控制的時候,你可以用setUserAgentString來調整用戶代理,所以你可以在你的網絡應用中迴應它:

myWebView.getSettings().setUserAgentString('Danny/1.0 not Chrome or IE or Webkit'); 

其他瀏覽器應該相對容易使用他們的用戶代理字符串。

+0

您可以添加有關Android的setUserAgentString的一些細節。它是在清單中還是在我的應用程序中!謝謝 – 2014-10-11 19:44:09

+0

@HasanAYousef見編輯;你只需在web視圖中調用getSettings()。setUserAgentString('blah');'。 – 2014-10-11 19:47:47