Хорошо, это уродливо, но оно дает мне постоянную в Firefox и Chromium, непостоянную постоянную (WTF?) В Safari и Opera и переменную в IE.
Конечно, eval () - это зло, но без него IE выдает ошибку, не позволяющую запускать скрипты.
Safari и Opera поддерживают ключевое слово const, но вы можете изменить значение const .
В этом примере серверный код записывает JavaScript-код на страницу, заменяя {0} значением.
try{
// i can haz const?
eval("const FOO='{0}';");
// for reals?
var original=FOO;
try{
FOO='?NO!';
}catch(err1){
// no err from Firefox/Chrome - fails silently
alert('err1 '+err1);
}
alert('const '+FOO);
if(FOO=='?NO!'){
// changed in Sf/Op - set back to original value
FOO=original;
}
}catch(err2){
// IE fail
alert('err2 '+err2);
// set var (no var keyword - Chrome/Firefox complain about redefining const)
FOO='{0}';
alert('var '+FOO);
}
alert('FOO '+FOO);
Для чего это хорошо? Не так много, так как это не кросс-браузер. В лучшем случае, может быть, немного спокойствия, что по крайней мере некоторые браузеры не позволят букмарклетам или сторонним скриптам изменять значение.
Протестировано с Firefox 2, 3, 3,6, 4, Iron 8, Chrome 10, 12, Opera 11, Safari 5, IE 6, 9.