2011-12-30 9 views
7

this sample codeには、外部ソースと本体の両方を含むスクリプトタグがあります。私はこれが含まれているスクリプトにいくつかの情報を渡す巧妙な方法だと考えています。 どのように動作しますか?外部ソースと本体の両方を含むスクリプトタグ

<html> 
    <head> 
    <script src="http://unhosted.org/remoteStorage.js">{ 
     onChange: function(key, oldValue, newValue) { 
     if(key=='text') { 
      document.getElementById('textfield').value= newValue; 
     } 
     }, 
     category: 'documents' 
    }</script> 
    </head> 
+0

これは、コードの実行に違いがあるかどうかというよりも、それがどのように動作するかということの問題とは思えません。 – Purag

答えて

6

タグに含まれるスクリプトは、通常の状況では評価されません。私があなたの例で起こっていると思うのは、評価されているように内容自体をremoteStorage.jsが読んでいるということです。これは、マークアップできちんと見えますが、この

//grab the last script tag in the DOM 
//this will always be the one that is currently evaluating during load 
var tags = document.getElementsByTagName('script'); 
var tag = tags[tags.length -1]; 
//force evaluation of the contents 
eval(tag.innerHTML); 

のようなものは、私は、自分自身だけで別のスクリプトタグを使用して、この強制的な評価を避けるだろう。

2

これは機能しません。 html specsは、スクリプトタグにsrc属性がある場合、<script></script>の内容は無視し、srcの場所のコードのみを実行する必要があると述べています。

一方、これはjavascriptを理解しているブラウザでは正常に低下しますが、外部JSコードをサポートするには十分ではありません。このようなブラウザが存在する場合、誰が知っていますが、一般的に言えば、スニペットのonchangeコードは現代的なブラウザで実行しないでください。

+0

あなたの言うことが真実ならば、このコードはまったく意味がありません。私は何とかそれを疑う。 – Thilo

+0

要素の中で、「onChange」と「category」を以下のように指定してください。「 – Thilo

+0

」という仕様にも当てはまります。残念ながら、スペックをジョークとして扱い、自分のことを行う悪いブラウザ(* koff * microsoft * koff *)はあまりにも多くあります。 –

3

属性がsrcの場合、ブラウザはscript要素の内容を無視すると言われていますが、これは通常の方法(JavaScriptコードとして解析して実行)を処理しないことを意味します。コンテンツは引き続きDOMに格納され、スクリプトで読み取ることができます。コンテンツは、JavaScriptコードではなく、データでもあります。

関連する問題