带有外部源和主体的脚本标记

时间:2011-12-30 04:13:24

标签: javascript html

我刚遇到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>

3 个答案:

答案 0 :(得分:7)

在正常情况下,不会评估标记中包含的脚本。我认为在您的示例中发生的是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 );

虽然这在标记中看起来很整洁,但我自己只会使用单独的脚本标记并避免这种强制评估。

答案 1 :(得分:3)

虽然当浏览器具有script属性时会忽略src元素的内容,但这只是意味着它们不会以正常方式处理它(解析并作为JavaScript代码运行) )。内容仍然存储在DOM中,可以通过脚本读取。内容可以是任何事情,不一定是JavaScript代码,而是任何数据。

答案 2 :(得分:2)

它应该不起作用。 html specs表示如果脚本标记上有src属性,则应忽略<script></script>的内容,并且只应执行src位置的代码。

另一方面,这会在理解javascript的浏览器上优雅地降级,但不足以支持外部JS代码。如果存在这样的浏览器,谁知道,但一般来说,你的代码片段中的onchange代码不应该由任何体面的现代浏览器执行。