首页 > 解决方案 > HTML向后包含脚本

问题描述

我知道可以通过包含将 JS 包含在他们的 HTML 文件中<script src=""></script>,但是您可以指定它以向后加载脚本src(从下到上而不是从上到下逐行读取)吗?我不想将脚本包含在src任何内联 JS 或类似的东西中:它需要简单地包含在(但从下到上而不是从上到下)。此外,我知道我可以翻转脚本,以便从上到下加载它不是问题,但我想知道是否有任何方法可以简单地从下到上加载。

例如,这是一个test.js文件:

alert("line 1!");
alert("line 2!");
alert("line 3!");

如果我将它包含在一个test.html文件中,我可以在<head></head>or中执行此操作<body></body>

<script src="test.js"></script> <!-- Assuming They are in the same directory -->

现在,当它test.js被包含在内时,它(据我所知)将test.js从上到下阅读,因此alert("line 1!")将在alert("line 3!"). 而且,如果假设第 1 行test.js无效,则整个脚本将不再被包含在内。我想知道我是否可以<script src="test.js"></script>在第 3 行(最后一行)首先读取(so alert("line 3!"))和第一行最后读取(alert("line 1!"))的地方做一个包含。我正在做一个网络安全挑战,我知道我试图包含的文件的顶部不是有效的 JS,但底部是,所以理论上如果我可以从下到上包含它,我可以让我的 JS 在之前执行它抛出一个错误。

标签: javascripthtml

解决方案


您可以创建一个向后执行脚本内容的函数,方法是向目标 URL 发送 AJAX 请求,用换行符分割响应,反转结果数组,加入字符串然后使用eval.

像这样的东西:

function loadScriptBackwards(url) {
  var xhttp;
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      eval(this.responseText.split("\n").reverse().join('\n'))
    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
}

推荐阅读