문제

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

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

이 자바스크립트 조각은 빈 문자열을 반환합니다.noscript 노드의 콘텐츠를 가져오는 방법이 있나요?

추신.저는 이 특정 프로젝트에 프로토타입을 사용하고 있습니다.

도움이 되었습니까?

해결책

스크립팅이 활성화된 경우 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 콘텐츠에 대한 액세스는 요즘 다소 더 잘 지원되는 것으로 보이지만 여전히 다른 요소보다 버그가 나타날 가능성이 다소 높은 극단적인 경우로 생각됩니다. 다른 옵션이 있으면 피하겠습니다.

다른 팁

프로토 타입에 대해서는 잘 모르겠지만 jQuery와 함께 Chrome에서 작동합니다.

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

로부터 HTML 4.0 사양:

NoScript 요소를 사용하면 스크립트가 실행되지 않을 때 저자가 대체 컨텐츠를 제공 할 수 있습니다. noscript 요소의 내용은 다음 경우 스크립트 인식 사용자 에이전트에 의해서만 렌더링되어야합니다.

  • 사용자 에이전트는 스크립트를 평가하지 않도록 구성됩니다.
  • 사용자 에이전트는 문서의 앞부분 스크립트 요소에 의해 호출 된 스크립팅 언어를 지원하지 않습니다.

브라우저에서 스크립팅이 활성화되면 Noscript 태그 (이 경우 DIV)의 전체 내용이 모두 무시된다는 것을 의미합니다. "예제"DIV가 귀하의 경우 DOM을 통해 전혀 액세스 할 수 있음을 확인 했습니까?

Firefox 3.0.7, Safari 3.2.2 및 MSIE 7.0.5730.13 (WinXP SP3에 모두)로 테스트하는 것은 <noscript> 태그는 DOM 트리에서 완전히 생략됩니다.

액세스 할 수 있습니다 <noscript> 그러나 요소 자체는 DOM 방법을 사용하여 자식 요소를 변경합니다.

jQuery와 함께 $ ( "noscript"). text ())를 시도하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top