web-dev-qa-db-fra.com

Supprimer l'attribut frameborder de l'iframes

Le validateur W3C génère une erreur car Wordpress ajoute frameborder="0" à des iframes. De plus, le validateur n'aime pas l'attribut allow.

J'ai trouvé une question similaire pour les vidéos Vimeo: WordPress oEmbed W3C Validation . Cependant, je ne pouvais pas le faire fonctionner.

C'est le code que j'ai ajouté au fichier function.php qui ne fonctionne cependant pas:

add_filter( 'oembed_dataparse', function( $return, $data, $url )
{
    if( is_object( $data ) )
    {
        // Remove the unwanted attributes:
        $return = str_ireplace(
            array( 
                'frameborder="0"'
            ),
            '',
            $return
        );
    }
    return $return;
}, 10, 3 );

Voici à quoi ressemble le fragment de code source:

<iframe width="500" height="281" src="https://www.youtube.com/embed/qUi422H0sx0?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen>

Et est-ce que quelqu'un sait pour la deuxième erreur avec allow: Peut-il être simplement supprimé comme le frameborder ou existe-t-il une version html5 de celle-ci?

2
Benjamin Schlegel

WordPress n'ajoute pas l'attribut frameborder. YouTube fait. Cela fait partie de leur code d'intégration.

Si vous devez absolument le supprimer, vous pouvez utiliser le filtre embed_oembed_html pour modifier le code HTML renvoyé:

function wpse_308247_remove_frameborder( $html, $url ) {
    // If the URL to be embedded is from YouTube.
    if ( strpos( $url, 'youtube.com' ) !== false ) {
        // Replace the frameborder attribute with an empty string.
        $html = str_replace( 'frameborder="0"', '', $html );
    }

    return $html;
}
add_filter( 'embed_oembed_html', 'wpse_308247_remove_frameborder', 10, 2 );

Mais voici la chose: vous ne recevez rien de spécial pour éviter des erreurs dans le validateur. L'important est de comprendre les erreurs et les problèmes qu'elles peuvent causer, et non d'essayer de supprimer tous les avertissements ou erreurs sans contexte.

Dans cet esprit, l'attribut frameborder a probablement été ajouté par Google pour assurer la compatibilité ascendante avec les anciennes versions de HTML et il ne causera pas d'effets négatifs simplement en étant présent. Je ne pense pas que cela vaille la peine de l'enlever.

L'attribut allow est une situation différente. Il semble que ce soit pour supporter les fonctionnalités spécifiques de Chrome. Ainsi, même si le code HTML n'est pas valide, il a toujours un but. Il est similaire à l'attribut frameborder, même si le fait de le laisser ne causera aucun problème.

4
Jacob Peattie