从IFRAMES中删除框架边框属性

时间:2018-07-11 作者:Benjamin Schlegel

W3C验证器输出错误,因为Wordpress添加了frameborder="0" 到iframes。此外,验证器不喜欢allow属性。

我在Vimeo视频中发现了一个类似的问题:WordPress oEmbed W3C Validation. 然而,我无法让它工作。

这是我添加到函数中的代码。但无法工作的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: 它可以像frameborder一样被删除吗?或者它有html5版本吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

WordPress不添加frameborder属性。YouTube做到了。这是他们嵌入代码的一部分。

如果您必须将其移除,可以使用embed_oembed_html 用于修改返回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 属性很可能是Google为了向后兼容旧版本的HTML而添加的,它不会因为存在而产生任何负面影响。我认为不值得为移除它付出努力。

这个allow 属性是另一种情况。它似乎是为了支持Chrome的特定功能。因此,虽然它是无效的HTML,但它仍然有其用途。它类似于frameborder 属性,但离开它不会导致任何问题。

结束