当前位置: 首页 > 知识库问答 >
问题:

如何使用angularjs检测浏览器?

贺景胜
2023-03-14

我是新的angularjs。我怎么能检测用户代理在angularjs。有可能在控制器中使用它吗?尝试了下面这样的东西,但没有运气!

  var browserVersion = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);

我需要专门检测IE9!

共有3个答案

翟青青
2023-03-14

您应该使用条件注释

<!--[if IE 9]>
<script type="text/javascript">
    window.isIE9 = true;
</script>
<![endif]-->

然后,您可以在控制器中检查$window.isIE9。

白弘伟
2023-03-14

Angular library使用document.documentMode识别IE。它保存IE的主要版本号,如果用户代理不是IE,则保存NaN/undefined。

/**
* documentMode is an IE-only property
* http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
*/
var msie = document.documentMode;

https://github.com/angular/angular.js/blob/v1.5.0/src/Angular.js#L167-L171

$document示例(window.document的角度包装器)

// var msie = document.documentMode;
var msie = $document[0].documentMode;
// if is IE (documentMode contains IE version)
if (msie) {
  // IE logic here

  if (msie === 9) {
    // IE 9 logic here

  }
}
宋志学
2023-03-14

就像Eliran Malka问的,为什么你需要检查IE 9?

检测浏览器品牌和版本通常是一种难闻的气味。这通常意味着,如果您需要JavaScript来检测特定版本的浏览器,那么代码会有更大的问题。

有些情况下,某个功能无法正常工作,比如IE8或IE9不支持WebSocket。这应该通过检查WebSocket支持来解决,如果没有本机支持,则应用一个多边形填充。

这应该通过像Modernizer这样的库来完成。

也就是说,您可以轻松创建返回浏览器的服务。在某些有效情况下,浏览器中存在功能,但实现已过时或已损坏。现代化不适合这些情况。

app.service('browser', ['$window', function($window) {

     return function() {

         var userAgent = $window.navigator.userAgent;

        var browsers = {chrome: /chrome/i, safari: /safari/i, firefox: /firefox/i, ie: /internet explorer/i};

        for(var key in browsers) {
            if (browsers[key].test(userAgent)) {
                return key;
            }
       };

       return 'unknown';
    }

}]);

固定错别字经纪

注意:这只是一个如何在angular中创建服务的示例,该服务将嗅探userAgent字符串。这只是一个代码示例,不希望在生产环境中工作并报告所有情况下的所有浏览器。

更新

最好使用第三方库,如https://github.com/ded/bowser或https://github.com/darcyclarke/Detect.js.这些库分别将一个对象放在名为Bowser或检测的窗口上。

然后,您可以将其暴露到角度IoC容器中,如下所示:

angular.module('yourModule').value('bowser', bowser);

detectFactory.$inject = ['$window'];
function detectFactory($window) {
    return detect.parse($window.navigator.userAgent);
} 
angular.module('yourModule').factory('detect', detectFactory);

然后,您将以通常的方式注入其中一个,并使用lib提供的API。如果您选择使用另一个库,而不是使用构造函数方法,您将创建一个实例化它的工厂:

function someLibFactory() {
    return new SomeLib();
}
angular.module('yourModule').factory('someLib', someLibFactory);

然后,您将以正常方式将其注入到控制器和服务中。

如果要注入的库与您的需求不完全匹配,您可能希望使用适配器模式,在该模式中,您可以使用所需的确切方法创建类/构造函数。

在这个例子中,我们只需要测试IE 9,我们将使用上面的Bowser库。

BrowserAdapter.$inject = ['bowser']; // bring in lib
function BrowserAdapter(bowser) {
    this.bowser = bowser;
}

BrowserAdapter.prototype.isIe9 = function() {
    return this.bowser.msie && this.browser.version == 9;
}

angular.module('yourModule').service('browserAdapter', BrowserAdapter);

现在,在控制器或服务中,您可以插入browserAdapter,只要执行if(browserAdapter.isIe9){//do something}

如果以后您想使用检测而不是Bowser,代码中的更改将被隔离到BrowserAdapter。

更新

事实上,这些价值观从未改变。如果你在IE9中加载页面,它将永远不会变成Chrome44。因此,不要将BrowserAdapter注册为服务,只需将结果放入常量

angular.module('app').value('isIe9', broswerAdapter.isIe9);

 类似资料:
  • 问题内容: 我是angularjs的新手。如何在angularjs中检测到userAgent。可以在控制器中使用它吗?尝试了以下类似的方法,但是没有运气! 我需要专门检测IE9! 问题答案: 就像Eliran Malka询问的那样,为什么需要检查IE 9? 检测浏览器的品牌和版本通常是一种难闻的气味。通常,这意味着如果您需要JavaScript来检测特定版本的浏览器,则代码会有更大的问题。 在某些

  • 问题内容: 如何检测用户是否没有使用JavaScript或PHP使用任何浏览器Chrome,Firefox或Internet Explorer? 问题答案: 我发现在JS中执行此操作的最佳方法是在Quirksmode上。我为PHP制作了一个应与常见浏览器一起使用的PHP:

  • 问题内容: 如何使用JavaScript检测Safari浏览器?我在下面尝试过代码,它不仅可以检测Safari,还可以检测Chrome浏览器。 问题答案: 您可以轻松地使用Chrome的索引来过滤掉Chrome:

  • Web Storage 是一项非常重要,并且很实用的技术,因此浏览器的支持度非常高,所有的主流浏览器,包括IE8,都在一定程度上支持Web Storage。尽管如此,最好还是像往常一样,在使用前先检测浏览器是否支持Web Storage。 在Web Storage中,可以直接使用 window 对象访问特定域下存储的数据。因此,只需检测浏览器是否支持 window.localStorage 或 w

  • 问题内容: 我一直在寻找可以让我检测访问该网站的用户是否使用Firefox3或4的代码。我发现的所有代码都是用于检测浏览器类型而不是版本的代码。 如何检测这样的浏览器版本? 问题答案: 您可以看到浏览器说的内容,并将该信息用于记录或测试多个浏览器。

  • 我尝试使用request.meta['http_user_agent']来检测浏览器。但这将返回我测试时的浏览器类型列表 **我无法得到它返回值的模式。谁能告诉我如何得到浏览器名称