- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 html(),但找不到在父脚本中获取变量的方法。
child.html
<section class="mod_el">
<div id="any_element"></div>
</section>
<script type="text/javascript">
document.currentScript.childVar = {
parameterOne:"ONE"
};
</script>
parent.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”值的可能方法是什么?
非常感谢您的帮助
更新 - 寻找解决方案以这种方式解决了问题(没有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);
最佳答案
我不认为 document.currentScript
做你认为它做的事。它返回对当前正在执行的 <script>
的 DOM 元素的引用。标签。因此,当您将某些内容分配给 document.currentScript.someVar
时,您不是在创建全局变量或类似的东西,而是在创建 expando property在当前执行 <script>
标签。
不过,在这种情况下,因为您是在 .html
创建的代码中调用它, document.currentScript
实际上是对 <script>
的引用名为 .html
的标签.如果在插入 HTML 后我们查询 script
,我们可以看到这一点在 #parentDiv
之后标记.
因为JS不喜欢</script>
字符串中的标记,以下示例中的 HTML 是 URI 编码的。
本例中注入(inject)的实际 HTML 是:
<script>
document.currentScript.childVar = {
foo: 'bar'
};
</script>
var rawHtmlText = decodeURI(`%3Cscript%3E%0A%20%20document.currentScript.childVar%20=%20%7B%0A%20%20%20%20foo:%20'bar'%0A%20%20%7D;%0A;%3C/script%3E%0A`);
$("#parentDiv").html(rawHtmlText);
// This script block is inserted after #parentDiv, so use
// the sibling combinator to get a reference to it.
console.log($('#parentDiv + script').get(0).childVar);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parentDiv"></div>
您可以明确地将某些内容放入全局范围,以便您可以通过将其添加为全局对象的属性来从其他代码访问它,在浏览器的情况下,即 window
.
在此示例中注入(inject)的 HTML 是:
<section class="mod_el"></section>
<script>
window.globalVar = {
foo: 'bar'
};
</script>
var rawHtmlText = decodeURI(`%3Csection%20class=%22mod_el%22%3E%3C/section%3E%0A%3Cscript%3E%0A%20%20window.globalVar%20=%20%7B%0A%20%20foo:%20'bar'%0A%7D;%0A%3C/script%3E`);
$("#parentDiv").html(rawHtmlText);
console.log(globalVar);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parentDiv"></div>
关于javascript - jQuery html 脚本 document.currentScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489850/
我在 Chrome 扩展中定义了 XHR 请求,该请求从特定网站提取 JavaScript 文件并在其中执行函数。像这样: //This will return the remote JS file
浏览器是Chrome,应该支持document.currentScript 但是 index.html 1.js setInterval(function() { var fullUrl =
当用户滚动页面时,我将附加一个 div 标签,并在同一 div 中附加一个 js 标签。 现在,我用“js_div_1”、“js_div_2”、“js_div_3”等指向父标记,并附加一些内容。 HT
这是一个示例代码: HTML alert('This is alert!') JS window.alert = function(data) //alert() over-riding {
我使用 html(),但找不到在父脚本中获取变量的方法。 child.html document.currentScript.childVar = { para
我想从 shadowDOM 内部访问当前脚本或 shadow root。 并且,最终目的是在同一个 shadowDOM 中获取 div.target 元素。 我尝试使用 document.curren
我想通过将数据的 id 作为 script 标记中的属性将数据附加到 div 中。在此示例中,first-div 应该附加“test1”,second-div 应该附加“test2”。 但是,结果是“
我正在学习网络组件。要获取模板,我需要这样做: The sky is blue var tmpl = (document.currentScript||document._curre
如何在脚本 type="module"中获取 ownerDocument? text let owner = document.currentScript.ownerDocument /
这是一个返回图像宽度的函数,给定图像的 url: async function getImageWidthByUrl(imgUrl) { const imgEl = document.create
我是一名优秀的程序员,十分优秀!