javascript - 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 在之前执行它抛出一个错误。
解决方案
您可以创建一个向后执行脚本内容的函数,方法是向目标 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();
}
推荐阅读
- javascript - Angular 12 - 每个页面上具有动态内容的打印标题与 ngfor 中的最后一项重叠
- javascript - Jquery datepicker 最初不是在选择时打开的
- python - print_control_identifiers() 在新窗口上
- bash - 如何检查行的第一个单词,如果匹配则导入该行?
- neo4j - 如何与 Neo4j Graphql 建立关系?
- flutter - Flutter Column:设置项目之间的固定空间
- python - 将 cumcount 0 值替换为两列上 groupby 中的先前值
- reactjs - React 中的 Axios useState
- photoshop - 通过 Javascript 加载 .atn 文件时出错
- angular - 类型 X 缺少类型“postType[]”中的以下属性:长度、弹出、推送、连接等 28 个