javascript - 加载外部js文件,修改里面的东西然后正常执行
问题描述
我想 1)通过 js 代码以编程方式加载一个外部 js 文件,2)替换其中的一些文字值,只有 3)正常执行它。
即,而不是这一步
<script async src="https://external_domain1.com/script1.js"></script>
我想做一些事情 3 个步骤:
<script>
// incomplete solution
var script = document.createElement('script');
script.src = "https://external_domain1.com/script1.js";
script.async = true;
document.head.appendChild(script); // must not be executed at this point yet
//?????
</script>
怎么做?
解决方案
使用 fetch/XMLHttpRequest 下载脚本,然后修改响应中的文本,然后将其添加为 inlilne 脚本
fetch("https://external_domain1.com/script1.js")
.then(response => response.text())
.then(text => {
const s = text.replace('foo', 'bar');
script.textContent = s;
const script = document.createElement('script');
document.body.appendChild(script);
});
这里不需要 async 标志,只需将其附加到document.body
选择
在您的服务器上有一些资源,访问时会执行以下操作
- 读
https://external_domain1.com/script1.js
- 修改内容
- 将修改后的内容作为响应发送
让我们假设这个脚本是用 PHP 编写的,存在于文件夹中/path-to-script
并被调用magicScript.php
- 然后在 HTML 中你只需要
<script async src="/path-to-script/magicScript.php">
推荐阅读
- html - 如何让 LI 元素包裹在 UL 中?
- python - 过滤、替换值并连接到一个数据帧
- java - Java内存泄漏,HEAP大小没有减少
- yacc - lex 和 yacc 中的计算器
- mongodb - 按嵌套数组/对象值(在不同级别)和 $project 通过匹配组(在特定级别)过滤 - MongoDB Aggregate
- html - Angular 8 Route Refresh 在部署服务器上提供 404
- java - 如何在 Eclipse 上更改 SDK 应用引擎
- javascript - SmoothScroll - 滚动的前几秒出现问题
- getstream-io - 哪种类型的提要最适合用户个人资料中的提要,该提要显示他或她已投票的所有帖子?
- python - Selenium python instagram关注按钮