feat(html/minifier): Remove script type attribute (#4407)

This commit is contained in:
Pig Fang 2022-04-25 15:46:38 +08:00 committed by GitHub
parent e0f10f876f
commit fec0f2e417
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 0 deletions

View File

@ -47,6 +47,16 @@ static BOOLEAN_ATTRIBUTES: &[&str] = &[
"visible",
];
static EXECUTABLE_SCRIPTS_MIME_TYPES: &[&str] = &[
"text/javascript",
"text/ecmascript",
"text/jscript",
"application/javascript",
"application/x-javascript",
"application/ecmascript",
"module",
];
struct Minifier {}
impl Minifier {
@ -70,6 +80,23 @@ impl VisitMut for Minifier {
n.visit_mut_children_with(self);
n.children.retain(|child| !matches!(child, Child::Comment(comment) if !self.is_conditional_comment(&comment.data)));
if n.tag_name.eq_str_ignore_ascii_case("script") {
n.attributes.retain(|attribute| {
!(attribute.namespace.is_none()
&& attribute.prefix.is_none()
&& attribute.name.eq_str_ignore_ascii_case("type")
&& attribute
.value
.as_ref()
.map(|v| {
EXECUTABLE_SCRIPTS_MIME_TYPES
.iter()
.any(|mime| v.eq_str_ignore_ascii_case(mime))
})
.unwrap_or_default())
})
}
}
fn visit_mut_attribute(&mut self, n: &mut Attribute) {

View File

@ -0,0 +1,9 @@
<script type="text/javascript" defer>
console.log();
</script>
<script type="application/javascript">
console.log();
</script>
<script type="module">
console.log();
</script>

View File

@ -0,0 +1,10 @@
<html><head><script defer>
console.log();
</script>
<script>
console.log();
</script>
<script>
console.log();
</script>
</head><body></body></html>