скрипт без кеша без использования Jquery

Здравствуйте, я пытаюсь создать скрипт, который вставляет в любую веб-страницу метатег, чтобы принудительно не кэшировать.

В настоящее время это мой код, и я не хочу использовать Jquery (как показано в Скрипт для принудительного поведения кэша IE8).

var MAXlen = document.getElementsByTagName('head')[0].childNodes.length; 
//Get the length of childnodes of head.

while(MAXlen--)
{
 document.getElementsByTagName('head')[0].childNodes[MAXlen+1] = document.getElementsByTagName('head')[0].childNodes[MAXlen]; 
//store every node one place after.

 if(MAXlen == 0)
 document.getElementsByTagName('head')[0].childNodes[0].innerHTML = '<META HTTP-EQUIV="Pragma" CONTENT="no-cache">';
 //place this hmtlcode into the first element of head.
 break;
}

person ArNx    schedule 01.01.2015    source источник
comment
Добро пожаловать в СО. В чем именно ваша проблема? Вы получаете ошибку? Если да, предоставьте информацию об этом.   -  person Magnilex    schedule 01.01.2015


Ответы (1)


Я бы использовал... prepend без JQuery:

parent.insertBefore(child, parent.firstChild);

parentNode.insertBefore (newChild, refChild);

Вставляет узел newChild как дочерний узел parentNode перед существующим дочерним узлом refChild. (Возвращает newChild.)

Если refChild равно null, newChild добавляется в конец списка дочерних элементов. Эквивалентно и более читабельно используйте parentNode.appendChild(newChild).

В этом случае вам не нужно будет выполнять цикл, как в представленном вами коде.

ОБНОВЛЕНИЕ:

Попробуйте это с вашим кодом...

var meta = document.createElement('meta');
meta.httpEquiv = "Pragma";
meta.content = "no-cache";
var head = document.getElementsByTagName('head')[0]
head.insertBefore(meta, head.firstChild);
  1. Во-первых, создайте метатег как узел.
  2. Затем зафиксируйте тег head как переменную.
  3. Используя переменную, вставьте узел перед первым потомком.

КОММЕНТАРИИ:

  • Функционал протестирован в Chrome.
  • Протестированный функционал в IE8 с предупреждением консоли: "Код на этой странице отключил обратное и прямое кэширование"
person rfornal    schedule 01.01.2015
comment
Правильная идея; недостаточно подробного кода, чтобы помочь новичку ОП. Покажите точно, как добавить метатег. (Не то, чтобы этот подход работал в большинстве браузеров; не уверен насчет IE8 (и плевать на IE8).) - person Brock Adams; 02.01.2015
comment
Добавлен код, чтобы показать, как это работает. Проверено в Хроме. - person rfornal; 02.01.2015
comment
Исправьте код, но остерегайтесь двух важных предостережений: (1) Вопрос касается IE8. Не обязательно имеет значение, работает ли он в Chrome. (2) Вы можете использовать JS для добавления тегов <meta>, но (большинство?) браузеры фактически не будут анализировать тег <meta>, добавленный таким образом. IE8 может быть исключением; сомневаюсь. - person Brock Adams; 02.01.2015
comment
Функционал протестирован в IE8... Код на этой странице отключил обратное и прямое кэширование Спасибо, что проверили и напомнили. - person rfornal; 02.01.2015
comment
Итак, похоже, что IE8 делает разбор динамически добавленных тегов <meta>. Молодец! - person Brock Adams; 02.01.2015
comment
Спасибо! Это отлично решило мою проблему! Я не знал, что есть способ получить firstChild так быстро. Я пытался написать на веб-страницу с помощью document.write, и он удалил всю веб-страницу вместо строк, которые я написал. Я все еще новичок, и я каждый день удивляюсь таким людям, как вы :) - person ArNx; 02.01.2015
comment
Рад, что смог помочь... и каждый день удивляюсь! - person rfornal; 02.01.2015