Javascript 为什么script.src可以这样工作?

Javascript 为什么script.src可以这样工作?,javascript,browser,Javascript,Browser,我找不到任何关于script标记的src属性的文档或规范 浏览器操纵该属性的值,该值始终反映该值。让我们考虑下面的例子: 域:https://example.com 脚本标记: script.getAttribute(“src”) >/path/a/b/c.js script.src > https://example.com/path/a/b/c.js 正如您所看到的,src和getAttribute(“src”)之间存在差异 我想知道在哪里可以找到关于它的详细信息(文档/规范/浏览器实现的源

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

浏览器操纵该属性的值,该值始终反映该值。让我们考虑下面的例子:

域:
https://example.com

脚本标记:

script.getAttribute(“src”) >/path/a/b/c.js script.src > https://example.com/path/a/b/c.js 正如您所看到的,
src
getAttribute(“src”)
之间存在差异

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

浏览器(包括移动设备)对该功能的支持是什么?

我在以下网站中找到了它:

首先讨论了
标记的
.src
属性:

IDL属性src、type、charset、defer都必须反映 相同名称的各个内容属性

然后,如果您按照a来查看“反射”的含义,您将看到:

如果反射IDL属性是其内容为 属性定义为包含URL,然后在获取时包含IDL 属性必须解析内容属性相对于的值 元素并返回生成的绝对URL(如果是) 成功,否则为空字符串;在设置时,必须设置 将content属性设置为指定的文字值。如果内容 属性不存在,IDL属性必须返回默认值, 如果内容属性有一个,则为空字符串

因此,用一种简短的形式来描述这一点:如果您设置
.src
属性(或任何其他具有URL的属性),那么您设置的内容将存储为属性。当您获得
.src
属性时,返回的值是相对于基本URL解析属性后得到的绝对URL

对于
.getAttribute()
,其规范是。它只是说:

按名称检索属性值

返回值

DOMString | Attr值为字符串,如果属性为空,则为空字符串 没有指定的值或默认值

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


这是一种有意的行为,而且这种行为已经存在很长时间了。也有特定浏览器的特定开发人员网站来描述这种行为

读取
.src
属性总是返回一个完全限定的URL,而不管您在HTML中或通过Javascript分配了什么

使用
.getAttribute(“src”)
读取相同的属性将返回HTML中的内容

Microsoft记录了IE在这方面对任何以IE8开头的属性具有URI的标记的行为

Mozilla记录了Firefox在这方面如何处理图像

图像演示(尽管具有
src
href
属性的所有类型的标记似乎具有相同的行为(包括
标记):

var t=document.getElementById(“目标”);
日志(“target.getAttribute('src')=”,target.getAttribute('src'));
日志(“target.src=,target.src);

关于
特别是,没有提到必须返回完全限定URI的
src
属性

仅处理
src
属性:

src属性(如果指定)提供要使用的外部脚本资源的地址。该属性的值必须是一个有效的非空URL,可能由空格包围,这些空格标识由
type
属性(如果该属性存在)提供的类型的脚本资源,或者该类型的脚本资源“
text/javascript
”,如果该属性不存在。资源是给定类型的脚本资源,前提是该类型标识脚本语言,并且该资源符合该语言规范的要求

尽管如此,我检查了Chrome、Firefox和Safari是否都实现了您提到的行为


通常,元素属性和属性之间存在差异,两者不一定一致

属性 在不深入规范的情况下,实例维护一个集合,该集合保存节点上的DOM属性

<div id="test"></div>

如果你想链接到你的浏览器的源代码,你必须告诉我们你的浏览器是什么。但是如果你知道你的浏览器叫什么,那么一个简单的谷歌搜索应该可以。我最终在HTML5规范中找到了这个行为,并将它添加到我下面的答案中。最终在HTML5规范中找到了对这个行为的引用。在我的答案的开头加上这个。很好的研究。谢谢! script.src > https://example.com/path/a/b/c.js
<div id="test"></div>