【问题标题】:Is it possible to get the contents of an external css file using javascript to add to an svg file?是否可以使用 javascript 获取外部 css 文件的内容以添加到 svg 文件?
【发布时间】:2023-03-27 16:03:01
【问题描述】:

我需要获取外部 css 文件的内容才能将其添加到 svg。

我正在寻找的实际上是 css 的 toString 方法。这可能吗?我还没找到解决办法。

这是我正在寻找 svg 的解决方案 xml:

 <?xml version="1.0" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
      "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
         width="10cm" height="5cm" viewBox="0 0 1000 500">
      <defs>
        <style type="text/css"><![CDATA[
          rect {
            fill: red;
            stroke: blue;
            stroke-width: 3
          }
        ]]></style>
      </defs>
      <rect x="200" y="100" width="600" height="300"/>
    </svg>

我尝试使用外部链接,但它没有呈现样式:

<?xml version="1.0" standalone="no"?>
<?xml-stylesheet href="mystyle.css" type="text/css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
     width="10cm" height="5cm" viewBox="0 0 1000 500">
  <rect x="200" y="100" width="600" height="300"/>
</svg>

编辑:我本来应该添加这个 我可以在浏览器中正常渲染 svg,因为它可以访问 svg。

我需要做的是将 svg 发送到服务器进行进一步处理(转换格式,保存到数据库..)。问题是样式丢失了,因为 CSS 不包含在 svg xml 中。我需要像上面的第一个代码块一样将 css 添加到 svg 本身,这样我就可以保留样式。

【问题讨论】:

  • 使用ajax然后获取样式?
  • 如果您使用正确的 mime 类型提供外部链接,它应该可以工作。
  • 您是否已经能够检索 css 文件的内容,而您只有不知道如何提取特定部分?是同域的外部css吗?

标签: javascript css svg


【解决方案1】:

如果您能够使用 JavaScript,您可以按如下方式获取样式表的内容:

[].slice.call(document.styleSheets[1].cssRules).forEach(function(rule){
  console.log('rule:', rule.cssText)
})

document.styleSheets[1] 是您的样式表。

【讨论】:

  • 谢谢你。这就是工作。然而,指定一个数组索引似乎不是最好的选择。有没有办法根据文件名检索文件?
  • 也许您可以尝试在链接标签上添加一个类名,然后遍历所有样式表以查找匹配项。类似if (document.styleSheets[i].ownerNode.className == 'yourclass') { //...get rules... }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2014-09-29
  • 2018-02-15
相关资源
最近更新 更多