如果我有这样的脚本标签:
<script
id = "myscript"
src = "http://www.example.com/script.js"
type = "text/javascript">
</script>
我想获取“script.js”文件的内容。我正在考虑类似的事情,document.getElementById("myscript").text
但在这种情况下不起作用。
如果我有这样的脚本标签:
<script
id = "myscript"
src = "http://www.example.com/script.js"
type = "text/javascript">
</script>
我想获取“script.js”文件的内容。我正在考虑类似的事情,document.getElementById("myscript").text
但在这种情况下不起作用。
tl;dr脚本标签不受CORS和同源策略的约束,因此 javascript/DOM 无法提供对通过<script>
标签加载的资源的文本内容的访问,否则会破坏same-origin-policy
.
长版本:
大多数其他答案(和接受的答案)正确地表明“正确”获取通过<script>
加载到页面中插入的 javascript 文件的文本内容的方法是使用XMLHttpRequest执行另一个单独的附加请求脚本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);
所以我不会重复那个,而是想通过这个答案添加关于为什么它的方面
您想获取文件http://www.example.com/script.js的内容吗?如果是这样,您可以转向 AJAX 方法来获取其内容,假设它与页面本身驻留在同一台服务器上。
我知道这有点晚了,但有些浏览器支持标签 LINKrel="import"
属性。
http://www.html5rocks.com/en/tutorials/webcomponents/imports/
<link rel="import" href="/path/to/imports/stuff.html">
对于其余的,ajax 仍然是首选方式。
我认为内容不会通过 DOM 获得。您可以获取 src 属性的值并使用 AJAX 从服务器请求文件。
.text 确实为您提供了标签的内容,只是您的开始标签和结束标签之间没有任何内容。您可以使用 .src 获取元素的 src 属性,然后如果您想获取 javascript 文件,您可以点击链接并为其发出 ajax 请求。