Для справки, это «не унифицированный» код:
javascript:(function () {
var i, t, D = document;
for (i = 0; t = D.getElementsByTagName('textarea')[i]; ++i) {
t.value = t.value.toUpperCase();
var newSS, styles = '* { text-transform: uppercase; } input, textarea { text-transform: none}';
if (D.createStyleSheet) {
D.createStyleSheet("javascript:'" + styles + "'");
} else {
newSS = D.createElement('link');
newSS.rel = 'stylesheet';
newSS.href = 'data:text/css,' + escape(styles);
D.documentElement.childNodes[0].appendChild(newSS);
}
}
})()
У меня нет Mac 8 под рукой на моем Mac, но попробуйте посыпать alert('here at line XXX');
для отладки бедняка.
Может быть, IE 8 не нравится источник javascript:
для таблицы стилей?
Кроме того, цикл добавляет столько таблиц стилей, сколько текстовых областей. Это глупо. Вытащите его из цикла, вот так:
javascript:(function () {
var i, t, D = document;
for (i = 0; t = D.getElementsByTagName('textarea')[i]; ++i) {
t.value = t.value.toUpperCase();
}
var styles = '* { text-transform: uppercase; } input, textarea { text-transform: none}';
if (D.createStyleSheet) {
D.createStyleSheet("javascript:'" + styles + "'");
} else {
var newSS = D.createElement('link');
newSS.rel = 'stylesheet';
newSS.href = 'data:text/css,' + escape(styles);
D.documentElement.childNodes[0].appendChild(newSS);
}
})()
Заметьте, в этом коде все еще есть сомнительные вещи. Я не слишком уверен в состоянии этого цикла. Что бы я сделал, это вытащил это из цикла, как это:
javascript:(function () {
var D = document;
var i, t = D.getElementsByTagName('textarea');
for (i = 0; i < t.length; i++) {
t[i].value = t[i].value.toUpperCase();
}
/* Rest of the code here. */
})()
В качестве упражнения для читателя / спрашивающего: это только прописные текстовые области, а не ввод текста.
EDIT :
Сократите это, чтобы остаться ниже максимальной длины:
javascript:(function () {
var D = document;
var i, t = D.getElementsByTagName('textarea');
for (i = 0; i < t.length; i++) {
t[i].value = t[i].value.toUpperCase();
}
D.createStyleSheet('javascript:"* { text-transform: uppercase; } input, textarea { text-transform: none}"');
})()
Результат:
javascript:(function(){var D = document;var i,t=D.getElementsByTagName('textarea');for(i=0;i<t.length;i++)t[i].value=t[i].value.toUpperCase();D.createStyleSheet('javascript:"*{text-transform:uppercase;}input,textarea{text-transform:none}"');})()
Это имеет только специфичный для IE код.