【问题标题】:SVG images not showing up in Chrome after going through javascript script通过 javascript 脚本后,SVG 图像未显示在 Chrome 中
【发布时间】:2017-07-28 22:23:25
【问题描述】:

我的页面上有一个粘滞页脚,但如果我启用了确保 SVG 图像在悬停时改变颜色的 javascript,SVG 文件将不会显示在 chrome 中。删除 javascript 会导致 Chrome 正常加载图像。

我无法在 jsfiddle 中重新创建效果,但代码如下: https://jsfiddle.net/r9szd060/

这是javascript代码:

$( document ).ready( function () {
    $( 'img[src$=".svg"]' ).each( function () {
        var $img = jQuery( this );
        var imgURL = $img.attr( 'src' );
        var attributes = $img.prop( "attributes" );

        $.get( imgURL, function ( data ) {
            // Get the SVG tag, ignore the rest
            var $svg = jQuery( data ).find( 'svg' );

            // Remove any invalid XML tags
            $svg = $svg.removeAttr( 'xmlns:a' );

            // Loop through IMG attributes and apply on SVG
            $.each( attributes, function () {
                $svg.attr( this.name, this.value );
            } );

            // Replace IMG with SVG
            $img.replaceWith( $svg );
        }, 'xml' );
    } );
} );

我尝试使用 embed 标记而不是 img 标记,但这不会改变 chrome 中的行为。 Firefox(桌面 + iOS + Android)可以很好地处理 SVG 图像,Safari(桌面 + iOS)也是如此。 SVG 图像在桌面版 Chrome 和 Android 版 Chrome 中消失。奇怪的是,iOS 上的 chrome 确实可以工作......

我认为这与通过 javascript 处理 SVG 的方式以及 SVG 的保存方式有关,但我对 javascript 的了解还不够,无法解决这个问题。我读过 chrome 有时对 SVG 文件有一些问题?我不知道如何上传 SVG 文件本身以便您查看,但如果有人可以告诉我如何传递相关信息(例如从在 illustrator 中打开的文件),我会将其添加到这篇文章中:) .

有谁知道问题是什么以及如何解决?

【问题讨论】:

  • jQuery 没有包含在你的小提琴中?!
  • 脚本在那里,我已经检查过了。不知道它是 jQuery 还是 javascript。就像我说的,我不是很擅长,哈哈。

标签: javascript jquery html css google-chrome


【解决方案1】:

您不能使用 CSS 为任何 SVG 设置样式,您必须为其设置宽度属性。这就是为什么您在页面中看不到它们的原因,每个 SVG 都采用他的实际尺寸(大约 600 像素)。

$( document ).ready( function () {
    $( 'img[src$=".svg"]' ).each( function () {
        var $img = jQuery( this );
        var imgURL = $img.attr( 'src' );
        var attributes = $img.prop( "attributes" );

        $.get( imgURL, function ( data ) {
            // Get the SVG tag, ignore the rest
            var $svg = jQuery( data ).find( 'svg' );

            // Remove any invalid XML tags
            $svg = $svg.removeAttr( 'xmlns:a' );

            // Loop through IMG attributes and apply on SVG
            $.each( attributes, function () {
                $svg.attr( this.name, this.value );
            } );

            //Add width on newly created svg
            $svg.attr('width', '30'); 

            // Replace IMG with SVG
            $img.replaceWith( $svg );
        }, 'xml' );
    } );
} );

【讨论】:

  • 我使用的图像较小(我想我将它们保存为 30x30 或类似的尺寸)。也就是说,如果缺少属性,为什么它可以在除 Chrome 之外的所有浏览器中工作?我测试了你的代码,它可以工作,所以我会接受这个作为答案:)。不过仍然对浏览器的差异感到好奇。
  • 这是一个很好的问题,我在 mozilla 和 chrome 上也遇到了同样的问题。无法将 css 应用于 svg :(
  • 但我正在将 css 应用于 SVG 图像,它也可以正常工作。 “旧”代码和新回答的代码。悬停时它会更改图像颜色。完美运行(在除 chrome 之外的所有浏览器中):-)
  • 对不起,我之前的评论很糟糕,我的意思是,你不能用 CSS 设置 svg 的宽度和高度。关于颜色变化,它适用于我的 chrome(59.0 版)
  • 哦,这样。谢谢 :)。我也有 v59,但是旧代码在 chrome 中不起作用,但是新代码可以,所以我的问题无论如何都解决了!
猜你喜欢
  • 2021-12-24
  • 2017-05-02
  • 1970-01-01
  • 2011-10-21
  • 2013-04-11
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多