html - 角度 6 的 SVG 超链接问题
问题描述
我通过Angular 6 组件的文件使用HTML标记显示SVG文件。我们称之为SVG文件。 img
.html
a.svg
此a.svg
图像包含链接到其他SVG文件的部分,我们只考虑其中的第一个,名为b.svg
.
所有的SVG文件都是静态的。它们assets
位于 Angular 6 应用程序文件夹的子文件夹中。
当我a.svg
直接在我的 Internet 浏览器下打开时,我可以单击超链接部分并导航到b.svg
,没有任何问题。
在 Angular 6 下,文件a.svg
显示正确,但显然,我无法点击交互部分。
我调查了这个问题,但无法找到有关这种行为的根本原因的真正线索。也许,与安全问题有关。我想知道
- 这是 Angular 6 的理想行为吗?
- 有没有办法告诉 Angular 6,允许用户对这些图像进行交互?
解决方案
终于找到了正确的方法。
首先,阅读 Angular的安全指南,它提供了许多很好的提示,尽管远非详尽无遗。
为了让我的代码顺利运行,这是我改变的
首先,在角度组件.html
文件中,我将HTML img
标记更改为一个div
标记,在该标记上我使用[innerHTML]
绑定到一个名为 svgFromFile 的内部属性
<div class='e2e-inner-html-bound' [innerHTML]='svgFromFile'></div>
然后,在角度组件.ts
文件中,我将实现更改bypassSecurityTrustHtml()
为在目标SVG文件的内容上使用
this.fn = '/assets/urba/diagram/' + params['fn'] + '.svg'; // from route parameter to image asset to be served
this.http.get(this.fn, {
responseType: 'text'
}).subscribe(
data => {
console.log(data);
this.svgFromFile = this.sanitizer.bypassSecurityTrustHtml(data);
},
error => console.log('svgFromFile', error)
);
这样做, SVG文件中的嵌入 URL现在是活动的并且可以取消引用。
推荐阅读
- ansible - 向 Ansible 中的现有键添加值
- python - 如何永久存储用户输入以在将来添加到另一个变量?
- javascript - React JS 中没有显式的数据绑定
- django - 我怎么知道电子邮件是真正的电子邮件还是不使用 django 框架
- typescript - TypeScript 隐含泛型
- javascript - 根据用户选择从数据库中获取数据
- reactjs - Firebase 存储安全规则不适用于文件夹
- mongodb - 如何使用 docker-compose 将 MongoDB 数据卷备份到主机?
- python - 如何使用python在数据框中将值从一列更改为另一列
- tsql - 如何在 TSQL / SQL Server Express 中创建列 AUTOINC?