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>