繁体   English   中英

如何检测使用AngularJS在浏览器中禁用了cookie

[英]How to detect that cookies are disabled in browser with AngularJS

我在当前项目中使用AngularJS,并且尝试实现一项功能,该功能可检测浏览器中是否禁用了cookie。 我试图使用AngularJS模块“ ngCookies”来解决此问题。 此功能的主要思想是创建一些cookie,然后检查该cookie是否已创建(并且可用)并显示消息(如果未创建)。 但这没有用。

控制器:

someProject.controller('CookieCtrl', ['$scope', '$cookieStore', function($scope, $cookieStore) {
    $scope.areCookiesEnabled = false;

    $cookieStore.put("TestCookie", "TestCookieText");
    $scope.cookieValue = $cookieStore.get("TestCookie");

    if ($scope.cookieValue) {
        $cookieStore.remove("TestCookie");
        $scope.areCookiesEnabled = true;
    }
}]);

视图:

<div class="main" data-ng-controller="CookieCtrl">
    <div class="warning_message" data-ng-show="!areCookiesEnabled">
        <span data-ng-bind="areCookiesEnabled"></span>
    </div>
</div>

谁能告诉我我的错误在哪里?

校验:

<div class="warning_message" data-ng-show="!areCookiesEnabled">

data-ng-show="!areCookiesEnabled"的评估结果为false 因此,如果存在cookie,则不会显示您的消息。

我做了一个显示这个的小矮人。 控制器代码很好,只需删除ng-show即可查看,或将!areCookiesEnabled更改为areCookiesEnabled

[编辑]

用$ cookieStore创建cookie后,调用方法$ window.cookies();。

此方法将返回所有创建的cookie。 例:

Object {__utmnodejs: "0x0ceb506e0755ba20", __utma: "137862001.1755124536.1363704654.1383162104.1383305355.73", __utmb: "137862001.2.10.1383305355", __utmc: "137862001", __utmz: "137862001.1383305355.73.49.utmcsr=stackoverflow.co…s-are-disabled-in-browser-with-angularjs/19719108"…}

如果cookie被禁用,将返回一个空对象:

Object {} 

发生这种情况是因为$cookieStore缓存了所有创建的cookie,因此,即使它们不可用,您也会在$cookie服务中看到缓存的值。

http://plnkr.co/edit/TiG6Zx5UKrF8BT9lmdId?p=preview

仅供寻求解决方案的人参考:

如果您不需要对Cookie的进一步控制,也不必“必须/必须”使用ngCookies。 另外,有时我会更喜欢使用本机js,而不是使用角度封装函数。

您可以只使用navigator.cookieEnabled来检查客户端的cookie支持是打开还是关闭。

例如:

function cookie () {
        var cookieEnable = navigator.cookieEnabled;

        if (typeof navigator.cookieEnabled === 'undefined' && !cookieEnable) {
            document.cookie = 'cookie-test';
            cookieEnable    = (document.cookie.indexOf('cookie-test') !== -1);
        }

        return cookieEnable;
    }

然后在您的控制器中:

$scope.enabled = cookie();

现在,您可以轻松地将其注入任何元素。

更多本地存储支持:

var localStorageChecker = function() {
            var item    = 'local-storage-test',
                status  = true;

            try {
                localStorage.setItem(item, item);
                localStorage.removeItem(item);
            } catch(e) {
                status = false;
            }

            return status;
        };

与cookie相同,在您的控制器中:

$scope.localStorageSupport = localStorageChecker();

顺便说一句,您最好将此功能放在服务中,例如initService,然后在应用初始化或注入所需的任何控制器后就可以使用它。

如果您使用controllerAs可能会有利于注入服务:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM