Получите доступ к содержимому <noscript> с помощью Javascript

StackOverflow https://stackoverflow.com/questions/620896

  •  05-07-2019
  •  | 
  •  

Вопрос

<noscript><div id="example">I want to get this innerHTML</div></noscript>

<script type="text/javascript"> alert($('example').innerHTML);</script>

Этот фрагмент javascript просто возвращает пустую строку.Есть ли способ получить содержимое узла noscript?

p.s.Я использую prototype в этом конкретном проекте.

Это было полезно?

Решение

Если сценарий включен, элемент noscript определяется как содержащий только текст - хотя это должно быть поддающийся анализу текст, с некоторыми ограничениями на содержание.Имея это в виду, вы должны быть в состоянии извлечь текст, проанализировать его, а затем найти нужный элемент.Ниже приведен элементарный пример этого:

var nos = document.getElementsByTagName("noscript")[0]; 
// in some browsers, contents of noscript hang around in one form or another
var nosHtml = nos.textContent||nos.innerHTML; 

if ( nosHtml )
{
  var temp = document.createElement("div");
  temp.innerHTML = nosHtml;

  // lazy man's query library: add it, find it, remove it
  document.body.appendChild(temp);
  var ex = document.getElementById("example");
  document.body.removeChild(temp);

  alert(ex.innerHTML);
}

Обратите внимание, что, когда я изначально писал этот ответ, вышеприведенный сбой произошел в Google Chrome;доступ к содержимому noscript, похоже, поддерживается в наши дни несколько лучше, но он по-прежнему кажется мне крайним случаем, в котором, возможно, несколько больше вероятность появления ошибок, чем в других элементах - я бы избегал этого, если у вас есть другие варианты.

Другие советы

Я не уверен насчет prototype, но это работает в Chrome с jQuery:

$('noscript').before($('noscript').text());

Из Спецификация HTML 4.0:

Элемент NOSCRIPT позволяет авторам предоставлять альтернативный контент, когда скрипт не выполняется.Содержимое элемента NOSCRIPT должно отображаться пользовательским агентом, поддерживающим сценарий, только в следующих случаях:

  • Пользовательский агент настроен не для оценки сценариев.
  • Пользовательский агент не поддерживает язык сценариев, вызванный элементом SCRIPT ранее в документе.

Мне кажется, это означает, что все содержимое тега NOSCRIPT (в данном случае вашего div) полностью игнорируется, если в браузере включен скрипт.Вы убедились, что в вашем случае div "example" вообще доступен через DOM?

Тестирование с Firefox 3.0.7, Safari 3.2.2 и MSIE 7.0.5730.13 (все на WinXP SP3) похоже, что все в <noscript> теги полностью опущены из дерева DOM.

Возможно, удастся получить доступ к <noscript> однако сам элемент, а затем используйте методы DOM для изменения его дочерних элементов.

Попробуйте $($("noscript").text()) с помощью jQuery.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top