catch SecurityError with localStorage, fixes #47
This commit is contained in:
parent
b108efae5c
commit
514cc705ef
3 changed files with 26 additions and 4 deletions
|
|
@ -60,7 +60,7 @@ BR.Map = {
|
||||||
map = new L.Map('map', {
|
map = new L.Map('map', {
|
||||||
worldCopyJump: true
|
worldCopyJump: true
|
||||||
});
|
});
|
||||||
if (!map.restoreView()) {
|
if (!BR.Util.localStorageAvailable() || !map.restoreView()) {
|
||||||
map.setView([50.99, 9.86], 6);
|
map.setView([50.99, 9.86], 6);
|
||||||
}
|
}
|
||||||
map.attributionControl.addAttribution(
|
map.attributionControl.addAttribution(
|
||||||
|
|
|
||||||
22
js/Util.js
22
js/Util.js
|
|
@ -29,6 +29,26 @@ BR.Util = {
|
||||||
msg = xhr.status + ': ' + xhr.statusText;
|
msg = xhr.status + ': ' + xhr.statusText;
|
||||||
}
|
}
|
||||||
return new Error(msg);
|
return new Error(msg);
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// check if localStorage is available, especially for catching SecurityError
|
||||||
|
// when cookie settings are blocking access (Chrome, Pale Moon, older Firefox)
|
||||||
|
//
|
||||||
|
// see also https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js
|
||||||
|
//
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Testing_for_support_vs_availability
|
||||||
|
// by Mozilla Contributors, with modifications;
|
||||||
|
// Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
localStorageAvailable: function() {
|
||||||
|
try {
|
||||||
|
var storage = window.localStorage,
|
||||||
|
x = '__storage_test__';
|
||||||
|
storage.setItem(x, x);
|
||||||
|
storage.removeItem(x);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -7,7 +7,7 @@ BR.OpacitySlider = L.Control.extend({
|
||||||
onAdd: function (map) {
|
onAdd: function (map) {
|
||||||
var container = L.DomUtil.create('div', 'leaflet-bar control-slider'),
|
var container = L.DomUtil.create('div', 'leaflet-bar control-slider'),
|
||||||
input = $('<input id="slider" type="text"/>'),
|
input = $('<input id="slider" type="text"/>'),
|
||||||
item = localStorage.opacitySliderValue,
|
item = BR.Util.localStorageAvailable() ? localStorage.opacitySliderValue : null,
|
||||||
value = item ? parseInt(item) : BR.conf.defaultOpacity * 100,
|
value = item ? parseInt(item) : BR.conf.defaultOpacity * 100,
|
||||||
minOpacity = (BR.conf.minOpacity || 0) * 100;
|
minOpacity = (BR.conf.minOpacity || 0) * 100;
|
||||||
|
|
||||||
|
|
@ -39,7 +39,9 @@ BR.OpacitySlider = L.Control.extend({
|
||||||
}).on('slide slideStop', { self: this }, function (evt) {
|
}).on('slide slideStop', { self: this }, function (evt) {
|
||||||
evt.data.self.options.callback(evt.value / 100);
|
evt.data.self.options.callback(evt.value / 100);
|
||||||
}).on('slideStop', function (evt) {
|
}).on('slideStop', function (evt) {
|
||||||
localStorage.opacitySliderValue = evt.value;
|
if (BR.Util.localStorageAvailable()) {
|
||||||
|
localStorage.opacitySliderValue = evt.value;
|
||||||
|
}
|
||||||
|
|
||||||
// When dragging outside slider and over map, click event after mouseup
|
// When dragging outside slider and over map, click event after mouseup
|
||||||
// adds marker when active on Chromium. So disable click (not needed)
|
// adds marker when active on Chromium. So disable click (not needed)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue