javascript - jQuery html 脚本 document.currentScript
问题描述
我使用 html() 并且找不到在父脚本中获取变量的方法。
child.html
<section class="mod_el">
<div id="any_element"></div>
</section>
<script type="text/javascript">
document.currentScript.childVar = {
parameterOne:"ONE"
};
</script>
父.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="container"></div>
<script>
async function LoadChild() {
const resp = await fetch(`child.html`, {
method: "GET",
credentials: "include"
});
if (!resp.ok)
return;
const result = await resp.text();
$("#container").html(result);
console.log(childVar.parameterOne); //!!!!!!! ?????
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
LoadChild();
</script>
</body>
</html>
在 parent.html 中获取变量“childVar”值的可能方法是什么?
非常感谢您的帮助
UPDATE - FIND SOLUTION 以这种方式解决了问题(没有jquery),但找到了结果..
在 child.html 中需要设置
document.currentScript.ownerDocument.childVar = {
parameterOne:"ONE"
};
在 parent.html 中
const link = document.createElement('link');
link.rel = 'import';
link.href = `child.html`;
link.setAttribute('async', '');
link.onload = (e) => {
console.log(link.import.childVar.parameterOne );
};
document.head.appendChild(link);
解决方案
我认为您应该使用以下解决方案。它将允许您解析 dom 中的这些脚本,并且您可以轻松地修改 dom 上的任何内容。
我已将您的 child.html 文件解析为 JS dom 对象,解析脚本元素并附加到您父母的 body 元素中。我知道这需要做一些工作,但您可以在运行时解决 child.html 的脚本错误。
Child.html
<section class="mod_el">
<h1>Hello</h1>
</section>
<script type="text/javascript">
childVar = {
parameterOne:"ONE"
};
</script>
父.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
async function LoadChild() {
const resp = await fetch('child.html', {
method: "GET",
credentials: "include"
});
if (!resp.ok)
return;
const result = await resp.text();
//Parse html.
var parser = new DOMParser();
var doc = parser.parseFromString(result,"text/html");
//Parse scripts.
try{
var scripts = "";
for(var script of doc.getElementsByTagName('script')){
scripts += script.innerText;
}
eval(scripts);
}
catch(e)
{
//Manage your runtime child.html script errors here.
}
/*
* Append body to our body element.
* Here you can amend your child.html's elements.
*/
document.body.appendChild(doc.body);
console.log(childVar.parameterOne);
}
LoadChild();
</script>
</body>
</html>
如果您喜欢此解决方案,请点赞。
推荐阅读
- oauth-2.0 - Opendistro 在接受来自 keycloak 的 JWT 令牌时抛出错误
- angular - Ag-Grid 从子级更新父级网格
- eclipse - 如何在 macOS 中为 Eclipse IDE 安装和配置 Tomcat?
- javascript - 从Javascript中的对象数组更改var名称
- tomcat - 访问日志显示 SD--终止状态时出现 haproxy 502 错误
- datagrip - 如何在 DataGrip 中执行命令
- python - Python - 检测列表中的拐点并替换
- postgresql - 将 Exposed with DataSource 与 Postgres 一起使用时不使用索引
- android - 使用 Android Q 进行 iperf 测试
- typescript - 如何让编译器警告对象数组与实例数组