< noscript>のコンテンツにアクセスするJavascriptを使用
-
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。この特定のプロジェクトでプロトタイプを使用しています。
解決
スクリプトが有効な場合、 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());
NOSCRIPT要素を使用すると、スクリプトが実行されていないときに作成者が代替コンテンツを提供できます。 NOSCRIPT要素のコンテンツは、次の場合にのみスクリプト対応のユーザーエージェントによってレンダリングされる必要があります。
- ユーザーエージェントは、スクリプトを評価しないように構成されています。
- ユーザーエージェントは、ドキュメントの前のSCRIPT要素によって呼び出されるスクリプト言語をサポートしていません。
これは、スクリプトがブラウザで有効になっている場合、NOSCRIPTタグ(この場合はdiv)の内容全体が完全に無視されることを意味するように思えます。 「例」が正しいことを確認しましたか?あなたの場合、divはDOM経由でアクセスできますか?
Firefox 3.0.7、Safari 3.2.2、およびMSIE 7.0.5730.13(すべてWinXP SP3上)でテストすると、&lt; noscript&gt;
タグ内のすべてがDOMから完全に省略されているように見えますツリー。
ただし、&lt; noscript&gt;
要素自体にアクセスしてから、DOMメソッドを使用してその子要素を変更することもできます。
jQueryで$($(&quot; noscript&quot;)。text())を試してください。