异步和延迟语法使用async="async"是否可行?

3

我有一个带皮肤的DNN网站。我的头部标签中有runat="server",所以我尝试在head标签内添加一个标签,如下所示:

<script async defer src="https://maps.googleapis.com/maps/api/js?key=<%#GoogleAPIkey%>"></script>

在代码后台,我将GoogleAPIkey设置为属性。问题是它没有加载该值。
然后我尝试在代码后台添加脚本标签,如下所示:
    HtmlGenericControl jqueryInclude = new HtmlGenericControl("script");
    jqueryInclude.Attributes.Add("type", "text/javascript");
    jqueryInclude.Attributes.Add("async", "async");
    jqueryInclude.Attributes.Add("defer", "defer");
    jqueryInclude.Attributes.Add("src", "https://maps.googleapis.com/maps/api/js?key=" + GoogleAPIkey );

这个方法输出标签作为:
<script async="async" defer="defer" src="https://maps.googleapis.com/maps/api/js?key=xxx"></script>

这个语法是否有效,还是需要采用不同的编写方式,或者将其移出head标签。
1个回答

4
规范说明async是一个布尔属性。至于如何指定布尔属性

元素上存在布尔属性表示为true值,而不存在该属性则表示为false值。

如果属性存在,则其值必须为空字符串或[...]属性的规范名称,没有前导或尾随空格。

注意: 布尔属性不允许使用“true”和“false”这些值。要表示false值,必须完全省略该属性。

因此,在技术上,重要的是属性存在与否,而不是它的值是什么。这意味着您可以使用async="async"

1
我相信,虽然不是100%确定,但XHTML要求属性始终具有值,这意味着您需要使用async = async才能满足验证器的要求。无论如何,这不会对“正常”的HTML验证器/浏览器造成伤害,因为它们将忽略该值并基于属性存在的事实工作(正如Mike C所指出的那样)。 - Christiaan Rakowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接