src AND contentを含むscript-Tagはどういう意味ですか?


122

Google +1ボタンの例:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
      {"parsetags": "explicit"}
</script>

スクリプトタグにはsrc属性コンテンツがあります。これは何を意味し、どのように機能しますか?


Firebug Liteはこのメソッドを使用します: getfirebug.com/firebuglite
Brad

回答:


71

ブラウザーによって、これは異なる方法で処理されます。一部がsrcエラーなしで含まれている場合にのみコンテンツを実行します。一部は、src成功に関係なく、スクリプトを含めようとした後にそれを実行します。この動作は信頼できないため(HTML5では禁止されている)、回避する必要があります。

Googleは特定の動作に依存していません。コンテンツは単なるオブジェクトリテラル(値)であるため、実行しても実際には何も実行されず、サイレントエラーが発生します。Googleのコードはscriptタグ自体のコンテンツを調べ、それに基づいて動作を調整します。


2
DOMを経由するよりも、スクリプトが(特に)独自のスクリプトタグの内容を確認するための賢い方法はありますか?
Karl Knechtel、2011年

11
私が使用したすべてのブラウザーで、src属性が存在し、実際にはオブジェクトリテラルではない場合、スクリプトの内容は実行されません。そのコードはSyntaxError、実行された場合に生成されます。スクリプトが使用するのは、単に「JSONテキスト」です。後で単独で。
CMS 2011年

2
@Karlを外部.jsファイル内で使用すると、現在実行中の<script>ノードのコンテンツが得られます。DOMへのアクセス s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; を含まないスクリプトノードのコンテンツを取得する方法はないと思います。
digitalbath 2011年

@CMSは、IEを除くすべてのブラウザで機能します。あなたはここで
ホセ・ファエティ2011

1
@jose-あなたの例はCMSが参照していたものではありません。コードがスタンドアロンステートメントとして実行される場合、構文エラーです。例(およびGoogleの例)が「機能する」のは、src属性が原因でスクリプト要素のコンテンツが無視されるためです。
RobG、2011年

23

場合はscript要素を持っているのsrc属性を、コンテンツがなければなら無視され、他の動作は、非準拠です。

ブログでは(ハックとして)評価されないことを認識して要素にコンテンツを配置し、DOMメソッドを使用してコンテンツを文字列として取得し、評価するか、新しいスクリプト要素に挿入することが推奨されています。これらはどちらも良い考えではありません。


4
これはなぜ良い考えではないのですか?サードパーティのプラグインを初期化するために使用されている場合はどうなりますか?
thekingoftruth 2014年

13

よるHTML5のドラフト仕様<script>と要素srcの属性は唯一のコメントアウトされている必要がありますスクリプトのドキュメントを与えることを意図されたコードを、。Googleがこの仕様に準拠しているようには見えません。


13

スクリプトが読み込まれると、スクリプトのコンテンツにアクセスするために、独自のスクリプトタグ内を調べます。

次のようなコードを使用します。

var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);

ジョンResigの礼儀。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.