代码之家  ›  专栏  ›  技术社区  ›  Floern

自Chrome 72之后,WebView无法解析SVG

  •  3
  • Floern  · 技术社区  · 5 年前

    我将SVG设置为 background-image 对于伪元素:

    content: '';
    position: absolute;
     right: 0;
    bottom: 0;
      left: 0;
    width: 100%;
    height: 12px;
    background-image: url('data:image/svg+xml;utf8,<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 620 12" enable-background="new 0 0 620 12" xml:space="preserve"><g><polygon fill="#D11A3C" points="48.8,12 0,12 0,0 54.1,0"/><polygon fill="#952592" points="93.8,12 44,12 49.3,0 99.1,0"/><polygon fill="#1E65AF" points="133.5,12 83.7,12 89,0 138.8,0"/><polygon fill="#D11A3C" points="156.3,12 106.5,12 111.8,0 161.6,0"/><polygon fill="#40BFC2" points="201,12 151.3,12 156.5,0 206.3,0"/><polygon fill="#1E65AF" points="216.4,12 166.6,12 171.9,0 221.7,0"/><polygon fill="#952592" points="226.5,12 176.7,12 182,0 231.7,0"/><polygon fill="#1E65AF" points="241.3,12 191.5,12 196.8,0 246.6,0"/><polygon fill="#40BFC2" points="260.9,12 211.1,12 216.4,0 266.2,0"/><polygon fill="#952592" points="282.6,12 232.9,12 238.1,0 287.9,0"/><polygon fill="#952592" points="282.6,12 232.9,12 238.1,0 287.9,0"/><polygon fill="#D11A3C" points="318.6,12 268.9,12 274.2,0 323.9,0"/><polygon fill="#D11A3C" points="318.6,12 268.9,12 274.2,0 323.9,0"/><polygon fill="#40BFC2" points="364.2,12 314.4,12 319.7,0 369.5,0"/><polygon fill="#1E65AF" points="368.1,12 318.3,12 323.6,0 373.4,0"/><polygon fill="#1E65AF" points="368.1,12 318.3,12 323.6,0 373.4,0"/><polygon fill="#D11A3C" points="378.5,12 328.7,12 334,0 383.8,0"/><polygon fill="#D11A3C" points="378.5,12 328.7,12 334,0 383.8,0"/><polygon fill="#40BFC2" points="424.8,12 375,12 380.3,0 430.1,0"/><polygon fill="#40BFC2" points="424.8,12 375,12 380.3,0 430.1,0"/><polygon fill="#952592" points="430.1,12 380.3,12 385.6,0 435.4,0"/><polygon fill="#1E65AF" points="465.6,12 415.8,12 421.1,0 470.9,0"/><polygon fill="#D11A3C" points="488.3,12 438.5,12 443.8,0 493.6,0"/><polygon fill="#D11A3C" points="620,12 613.4,12 618.7,0 620,0"/><polygon fill="#40BFC2" points="534.2,12 484.5,12 489.8,0 539.5,0"/><polygon fill="#1E65AF" points="548,12 498.2,12 503.5,0 553.3,0"/><polygon fill="#952592" points="556.5,12 506.7,12 512,0 561.8,0"/><polygon fill="#1E65AF" points="573.8,12 524.1,12 529.4,0 579.1,0"/><polygon fill="#40BFC2" points="592.5,12 542.8,12 548.1,0 597.8,0"/><polygon fill="#952592" points="614.4,12 564.6,12 569.9,0 619.7,0"/></g></svg>');
    background-repeat: repeat-x;
    background-position: bottom;
    

    但由于某些原因,它并没有出现在Firefox上。我不想使用base64数据url。在Firefox中这难道不可能吗?

    0 回复  |  直到 3 年前
        1
  •  149
  •   Robert Longson    9 年前

    URL中的#字符是保留的,用于指示 fragment identifier

    您必须对数据URL内容进行URL编码,这意味着将数据URL中的任何哈希字符转换为%23

        2
  •  9
  •   Employee Juan Ledesma    6 年前

    您可以使用 encodeURIComponent(uri) JS的功能。

    此函数对特殊字符进行编码,还可以对以下字符进行编码: , / ? : @ & = + $ #

    参考号: https://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

        3
  •  4
  •   Brad    6 年前

    对于尝试将url与sass变量一起使用(例如,对于填充)时存在此编码问题的任何人,以下内容非常有用: https://gist.github.com/JacobDB/0ffffaf8e772c12acf7102edb8a302be

    注意,您可能需要根据需要编辑内联svg的输出url(在我的情况下,我使用的是 data:image/svg+xml;utf8 相反)

        4
  •  1
  •   Joseph Austin    4 年前

    一个相关问题“svg填充颜色不使用十六进制颜色”
    svg fill color not working with hex colors
    此处引用。 给出的示例是:

    确定:<路径fill='red'。。。 不正常:<路径填充=“#FF0000”。。。

    我在尝试使用XMLSerializer导出svg时遇到了类似的问题。 导出的svg在#字符后被截断。 在我的例子中,用%23替换#不起作用。

    我可以通过用rgb()函数和十进制值替换十六进制常量来解决这个问题。例如,fill=“#FF0000”变为 fill=“rgb(255,0,0)”