javascript - Angular block svg xmlns 作为 $sce :insecurl

标签 javascript angularjs svg angularjs-material

我正在 Angular Material 中构建一个应用程序,其 md-icon 结构如下:

<md-icon class="ic1" md-svg-src='data:image/svg+xml,
  <svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 32 32">
    <ellipse ry="16" rx="16" id="svg_1" cy="16" cx="16" stroke-width="1.5" fill="#ff0000"/>                                    
  </svg>' class="s32">
</md-icon>

但它无法加载,因为 Angular 会阻止对 https://www.w3.org/2000/svg 的调用(我已经尝试过 HTTP 和 HTTPS)并抛出 $sce :insecurl 错误:

Error description

正如文档所建议的,我尝试将 URL 添加到 SCE 白名单:

app.config(function ($sceDelegateProvider) {
  $sceDelegateProvider.resourceUrlWhitelist(['self', 'https://www.w3.org/2000/svg', 'https://*.w3.org/**'])
})

但是没有效果。

我怎样才能让它发挥作用?

请注意,我已经简化了 HTML 以仅显示相关内容,实际上,我根据变量动态更改填充颜色,因此如果我能让这个动态版本正常工作,我宁愿不将每个 SVG 保存为文件。

最佳答案

我假设您在运行时生成该 SVG 字符串,而不是像上面那样对其进行硬编码?否则您将无法更改填充颜色。

即。所以类似:

 md-svg-src='{{generateIcon()}} ...

正确吗?

如果是这样,那么您是否尝试过使用 Base64 编码 SVG?

generateIcon() {
  svgStr = "whatever";
  return "data:image/svg+xml;base64," + base64(svgStr);
}

也许有更好的 Angular 方法来解决这个问题。但这可能是一个可能的解决方法。

关于javascript - Angular block svg xmlns 作为 $sce :insecurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591303/

相关文章:

javascript - 如何检查函数是否有参数

javascript - 如果不等于值,如何遍历推送数组?

javascript - 如何从 AngularJS 中的服务调用 ajax?

javascript - jQuery - 如何从单个函数中的元素中删除对所有元素的监听器?

javascript - 将元素从链接函数传递到指令内的 Controller 函数,然后再传递给另一个指令

javascript - 如何使用 CSS 和 SVG 制作线条动画

python - 使用 reportlab 将 .SVG 文件嵌入到 PDF 中

javascript - 在隔离作用域指令中,在作用域上定义变量和在 Controller 上定义变量之间有什么区别吗?

javascript - 如何让 AngularJS 自定义过滤器处理用户输入?

javascript - 在浏览器中生成、查看和保存 SVG 客户端