如何获取指定为<script>标记的'src'的文件内容?

Mar*_*son 66 javascript

如果我有这样的脚本标记:

<script
    id = "myscript"
    src = "http://www.example.com/script.js"
    type = "text/javascript">
</script>
Run Code Online (Sandbox Code Playgroud)

我想获取"script.js"文件的内容.我正在考虑类似document.getElementById("myscript").text但在这种情况下它不起作用.

Las*_*sar 10

您想获取文件http://www.example.com/script.js的内容吗?如果是这样,您可以转向AJAX方法来获取其内容,假设它与页面本身位于同一服务器上.

你能详细说明你想要完成的事情吗?

  • 如果是这样,请不要担心,浏览器会自行处理外部JS脚本的缓存. (8认同)
  • @Qix浏览器缓存是可靠的,但通常需要往返服务器(例如:检查ETag).使用本地存储可以防止此往返. (3认同)
  • 我想存储脚本的内容,以便我可以缓存它并在一段时间后直接使用它,而不必从外部 Web 服务器(与页面不在同一台服务器上)获取它。 (2认同)

Sau*_*eil 10

我知道它有点晚了,但有些浏览器支持标签LINK rel="import"属性.

http://www.html5rocks.com/en/tutorials/webcomponents/imports/

<link rel="import" href="/path/to/imports/stuff.html">
Run Code Online (Sandbox Code Playgroud)

对于其他人来说,ajax仍然是首选方式.

  • 现在该接口已过时。 (2认同)

Dan*_*ein 5

我认为这些内容不会通过DOM提供.您可以获取src属性的值并使用AJAX从服务器请求文件.


hum*_*ace 5

tl; dr脚本标记不受CORS同源策略的约束,因此javascript / DOM无法提供对通过<script>标记加载的资源的文本内容的访问,否则它会中断same-origin-policy

长版本: 大多数其他答案(以及公认的答案)正确表明,“ 正确 ”的方式来获取通过<script>加载到页面中插入的javascript文件的文本内容,它使用XMLHttpRequest来执行另一个单独的附加请求scripts src属性中指示的资源,以下简短的javascript代码将演示这些内容。但是,我发现其他答案并没有解决获取javascript文件文本内容的问题,即允许访问通过包含的文件内容<script src=[url]></script>会破坏CORS策略,例如,现代浏览器会阻止XHR资源提供访问控制允许来源标头,因此浏览器不允许使用除以外的其他任何方式CORS来获取内容。

使用以下代码(如在其他问题“使用XHR / AJAX”中提到的那样),可以对文档中所有非内嵌脚本标签进行另一个请求。

function printScriptTextContent(script)
{
  var xhr = new XMLHttpRequest();
  xhr.open("GET",script.src)
  xhr.onreadystatechange = function () {
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
      console.log("the script text content is",xhr.responseText);
    }
  };
  xhr.send();
}
Array.prototype.slice.call(document.querySelectorAll("script[src]")).forEach(printScriptTextContent);
Run Code Online (Sandbox Code Playgroud)

因此,我不再重复,而是想通过此答案在其原因方面进行补充。

  • 谢谢 - 这是解释***为什么***你***必须***使用 AJAX 来检索服务器往返中的文本的唯一答案,以及为什么脚本标签已经加载的内容不是否则可用。 (2认同)