nam: dom.storage.enabled false -> Security error

Hallo

Mit folgendem Code erzeuge ich abhängig vom Wert von 'storageType' ein Alias 'storage' für ein DOM-Storage-Objekt:

if (storageType !== 'none' &&  
	typeof(window.localStorage) !== 'undefined' &&  
	typeof(window.sessionStorage) !== 'undefined' &&  
	typeof(JSON.stringify) !== 'undefined' &&  
	typeof(JSON.parse) !== 'undefined') {  
	switch (storageType) {  
	case 'session':  
		storage = window.sessionStorage;  
		break;  
	case 'local':  
		storage = window.localStorage;  
		break;  
	default:  
		storage = undefined;  
		break;  
	}  
}

Funktioniert soweit so gut. Nur wenn die DOM-Storage-Funktionalität im Firefox per about.config>dom.storage.enabled ausgeschaltet ist, gibt es folgende Fehlermeldung:

uncaught exception: [Exception... "Security error"  code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)"

Kann ich das irgendwie ohne try-catch abfangen?

  1. Moin Moin!

    uncaught exception: [Exception... "Security error"  code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)"

    Kann ich das irgendwie ohne try-catch abfangen?

    Warum willst Du auf Krampf try-catch vermeiden? Weil es nicht in die if-Bedingung paßt? Doch, es paßt dort hinein, über den Umweg einer Funktion, die die eigentliche Abfrage in try-catch verpackt und entweder true oder false zurückliefert, im Exception-Fall bei Deiner Konstruktion natürlich false.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hi

      try catch finde ich unschön und möchte es nur brauchen, wenn's nicht anders geht. Deshalb habe ich die Frage auch so formuliert, wie sie da steht…

      1. try catch finde ich unschön und möchte es nur brauchen, wenn's nicht anders geht. Deshalb habe ich die Frage auch so formuliert, wie sie da steht…

        Es geht nicht anders.

        Struppi.

        1. Moin Moin!

          try catch finde ich unschön

          Das ist ja mal eine qualifizierte Begründung.

          und möchte es nur brauchen, wenn's nicht anders geht.
          Es geht nicht anders.

          Bleibt noch zu erwähnen, dass sich prähistorische Browser (JS < 1.5) an den ihnen unbekannten Schlüsselworten try und catch reiben, und entsprechend rumnörgeln oder das Script abbrechen. Gelegentlich imlementiert DIESE Browser-Generation aber das onError-Event, entsprechend kann man auf einige aufgetretene Fehler in einigen (NICHT allen) Browsern reagieren.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          1. Gelegentlich imlementiert DIESE Browser-Generation aber das onError-Event, entsprechend kann man auf einige aufgetretene Fehler in einigen (NICHT allen) Browsern reagieren.

            Stimmt, ich vergaß. Wobei man sich damit aber das Leben schwer macht, denn es werden keine Fehler mehr angezeigt.

            Aber gut, dass es den Thread gab, ich kannte das feature gar nicht und hab's jetzt abgeschaltet.

            Struppi.

            1. @Alexander (HH):

              try catch finde ich unschön
              Das ist ja mal eine qualifizierte Begründung.

              Ist mein Code, da reicht das ja wohl als Begründung, oder?
              Technisch gesehen könnte man noch mit leichten Performance-Einbußen argumentieren; da die Funktion aber nur einmal aufgerufen wird, ist das hier egal.

              @alle
              Danke für eure Antworten, dann gibt's halt ein try-catch ;-)

              nam