2013-10-31 54 views
2

我在當前項目中使用AngularJS,並試圖實現一項功能,該功能檢測瀏覽器中是否禁用了Cookie。我試圖使用AngularJS模塊「ngCookies」來解決這個問題。此功能的主要思想是創建一些cookie,稍後檢查該cookie是否已創建(並且可用),如果不是,則顯示消息。但它沒有奏效。如何使用AngularJS檢測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> 

可有人告訴我,是我的錯?

+0

你得到了什麼結果?你總是把餅乾拿回來嗎? –

+0

'不起作用'不會告訴任何人。邏輯看起來很好....設置一個斷點並逐步瀏覽代碼,看看它在做什麼 – charlietfl

+0

準確地說,我總是得到cookie。我的瀏覽器是FF24。 – user2943082

回答

2

檢查:

<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是禁用,會返回一個空obkect:

Object {} 

發生這種情況,因爲$cookieStore緩存中的所有創建的cookie,那麼,即使它們被unavaliable,你會看到緩存$cookie服務中的值。

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

+0

謝謝Deividi,我看到它的工作原理。但如果我在瀏覽器中禁用cookie,行爲是一樣的( – user2943082

+0

以及如何檢查cookie是否使用$ browser.cookies()創建? –

1

只是針對有人找解決方案參考:

它不需要餅乾的進一步控制,這不是「必須/必須」使用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; 
     }; 

同餅乾,你的控制器中:

$scope.localStorageSupport = localStorageChecker(); 

順便說一句,你最好把你的服務中此功能,東西像initService,那麼你可以在你的應用初始化或注入任何你喜歡的控制器後使用它。

如果使用controllerAs可能會使注入服務的優勢:)

相關問題