rzy*_*mek 6 javascript browser
我找不到任何关于标签src属性的文档或规范script.
浏览器操纵该属性的值,它始终反映绝对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规范中找到了它:
首先有这个,讨论的.src属性的<script>标签:
IDL属性src,type,charset,defer,每个都必须反映相同名称的相应内容属性.
然后,如果您按照该规范中的链接查看"反映"的含义,则可以执行以下操作:
如果反射IDL属性是DOMString属性,其内容属性被定义为包含一个URL,然后在获取时,该IDL属性必须解决的内容属性的值相对于元素,并返回结果的绝对URL,如果这是成功的,或否则为空字符串; 在设置时,必须将content属性设置为指定的文字值.如果content属性不存在,则IDL属性必须返回默认值(如果content属性有一个),否则返回空字符串.
因此,要以一个简短的形式描述:如果您设置.src属性(或任何其他属性采用URL),那么您设置的确切内容将存储为属性.获取.src属性后,返回的值是在相对于基URL解析属性后生成的绝对URL.
至于.getAttribute(),那里的规范就在这里.它只是说:
按名称检索属性值.
回报价值
DOMString | Attr值作为字符串,如果该属性没有指定或默认值,则为空字符串.
值得注意的是,此描述中没有任何与URL属性在直接读取其属性时具有的特殊行为相关的任何内容,如上所述.因此,使用.getAttribute()没有那种特殊的"反映"行为.它只返回属性的原始值,没有特殊getter行为.
这是一种预期的行为,并且这种方式已经很长时间了.还有针对描述该行为的特定浏览器的特定开发人员网站.
.src无论您在HTML中或通过Javascript分配了什么,读取属性始终会返回完全限定的URL.
读取相同的属性,.getAttribute("src")返回HTML中的内容.
Microsoft记录IE在这方面的行为如何在这里以IE8作为属性开始的任何标记.
Mozilla的Firefox的文件在这方面对图像的行为在这里.
图像演示(尽管具有src或href属性的所有类型的标签似乎具有相同的行为(包括<script>标签):
var t = document.getElementById("target");
log("target.getAttribute('src') = ", target.getAttribute('src'));
log("target.src = ", target.src);Run Code Online (Sandbox Code Playgroud)
<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">Run Code Online (Sandbox Code Playgroud)
事实上,这是一个利用这个事实的小实用程序:
function makeAbsolute(uri) {
var a = document.createElement("a");
a.href = uri;
return a.href;
}
var x = makeAbsolute("test.html");
document.write(x);Run Code Online (Sandbox Code Playgroud)