gpt4 book ai didi

javascript - 为什么 script.src 会这样工作?

转载 作者:数据小太阳 更新时间:2023-10-29 05:18:18 24 4
gpt4 key购买 nike

我找不到关于 src 的任何文档或规范script 的属性标签。

浏览器操纵这个属性的值,它总是反射(reflect) absolute URI .让我们考虑以下示例:

域名:https://example.com

脚本标签:<script src="/path/a/b/c.js"></script>

script.getAttribute("src")> /path/a/b/c.js
script.src> https://example.com/path/a/b/c.js

如您所见,src 之间存在差异和 getAttribute("src") .

我想知道在哪里可以找到有关它的详细信息(浏览器实现的文档/规范/源代码)。

浏览器(包括手机)对该功能的支持情况如何?

最佳答案

我在 HTML5 specification 中找到了它:

首先是this讨论了 .src <script> 的属性(property)标签:

The IDL attributes src, type, charset, defer, each must reflect the respective content attributes of the same name.

然后,如果您关注 link in that specification要了解“反射(reflect)”的含义,您可以这样做:

If a reflecting IDL attribute is a DOMString attribute whose content attribute is defined to contain a URL, then on getting, the IDL attribute must resolve the value of the content attribute relative to the element and return the resulting absolute URL if that was successful, or the empty string otherwise; and on setting, must set the content attribute to the specified literal value. If the content attribute is absent, the IDL attribute must return the default value, if the content attribute has one, or else the empty string.

所以,用一个简短的形式来描述:如果你设置 .src属性(或任何其他带有 URL 的属性),那么您设置的内容将作为属性存储。当你得到 .src属性,返回的值是相对于基本 URL 解析属性后得到的绝对 URL。

至于.getAttribute() ,其规范为 here .它只是说:

Retrieves an attribute value by name.

Return Value

DOMString | The Attr value as a string, or the empty string if that attribute does not have a specified or default value.

值得注意的是,此描述中没有任何与 URL 属性在如上所述直接读取其属性时所具有的特殊行为相关的内容。因此,使用 .getAttribute()没有那种特殊的“反射(reflect)”行为。它只返回属性的原始值,没有特殊 getter行为。


这是一种有意为之的行为,并且已经存在了很长时间。还有针对特定浏览器的特定开发者网站描述了该行为。

阅读.src属性始终返回完全限定的 URL,无论您在 HTML 中或通过 Javascript 分配了什么。

使用 .getAttribute("src") 读取相同的属性准确返回 HTML 中的内容。

对于以 IE8 here 开头的 URI 作为属性的任何标记,Microsoft 记录了 IE 在这方面的行为方式.

Mozilla 记录了 Firefox 在图像处理方面的表现 here .

图像演示(尽管所有类型的具有 srchref 属性的标签似乎具有相同的行为(包括 <script> 标签):

var t = document.getElementById("target");
log("target.getAttribute('src') = ", target.getAttribute('src'));
log("target.src = ", target.src);
<head>
<script src="http://files.the-friend-family.com/log.js"></script>
<base href="http://dummyimage.com">
</head>
<img id="target" src="/200x100/000/fff">

事实上,这里有一个利用这个事实的小工具:

function makeAbsolute(uri) {
var a = document.createElement("a");
a.href = uri;
return a.href;
}

var x = makeAbsolute("test.html");
document.write(x);

关于javascript - 为什么 script.src 会这样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com