web-dev-qa-db-ja.com

Iframeからframeborder属性を削除

Wordpressはframeborder="0"をiframeに追加するため、W3C Validatorはエラーを出力します。バリデータもallow属性を好きではありません。

私はVimeoのビデオのための同じような質問を見つけた: WordPressはW3Cの検証をenMed 。しかし、私はそれを機能させることができませんでした。

それは私がfunction.phpファイルに追加したコードですが、うまくいきません。

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 );

それがソースコードの断片のようなものです。

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

そして誰もがallowに関する2番目のエラーを知っていますか:それはちょうどフレームボーダーのように取り除かれることができますかそれのhtml5バージョンがありますか?

2

WordPressはframeborder属性を追加しません。 YouTubeはそうします。それは彼らの埋め込みコードの一部です。

絶対に削除する必要がある場合は、返されたHTMLを変更するためにembed_oembed_htmlフィルタを使用できます。

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 );

しかし、これが重要です。バリデータのエラーを回避するための特別な方法はありません。重要なのは、文脈なしにすべての警告やエラーを取り除こうとするのではなく、エラーとそれらが引き起こす可能性のある問題を理解することです。

そのことを念頭に置いて、frameborder属性はおそらく古いバージョンのHTMLとの後方互換性のためにGoogleによって追加されたものであり、それが存在することによって悪影響が生じることはありません。それを削除する努力の価値があるとは思わない。

allow属性は別の状況です。 Chrome特有の機能をサポートするためのようです。それは無効なHTMLですが、それでもまだ目的があります。 frameborder属性に似ていますが、そこに残しても問題は発生しません。

4
Jacob Peattie