【问题标题】:Script tag with both external source and body带有外部源和正文的脚本标记
【发布时间】:2011-12-30 16:28:29
【问题描述】:

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

【问题讨论】:

  • 我不认为它是如何工作的问题,而不是它是否会对代码的执行产生影响。

标签: javascript html


【解决方案1】:

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

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

    【讨论】:

      【解决方案3】:

      它不应该工作。 html specs 表示如果脚本标签上有src 属性,则应忽略&lt;script&gt;&lt;/script&gt; 的内容,只执行src 位置的代码。

      另一方面,这会在理解 javascript 但还不足以支持外部 JS 代码的浏览器上正常降级。如果存在这样的浏览器,谁知道呢,但一般来说,你的 sn-p 中的 onchange 代码不应该由任何像样的现代浏览器执行。

      【讨论】:

      • 如果你说的是真的,这段代码毫无意义。我有点怀疑。
      • 他们甚至有明确的指令来编写这样的脚本标签:“在 元素内,指定 'onChange' 和 'category' 如下所示”
      • 根据规范是真的。不幸的是,有太多糟糕的浏览器 (koffmicrosoftkoff) 将规范视为笑话并自行其是。
      猜你喜欢
      • 2011-10-30
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      相关资源
      最近更新 更多