如何使嵌入的SVG文件中的链接在主窗口中打开,而不是在单独的对象中打开。

47

我有一个包含URL链接的SVG文件(由Graphviz生成)。我希望这些链接可以被点击。首先我尝试使用

<img src="path/to/my.svg"/>

这会显示图片,但链接无法点击。将其更改为对象:

 <object data="/path/to/my.svg" type="image/svg+xml">

使链接可点击,但当用户单击它们时,新页面将在对象内部打开。有没有办法让链接在主窗口中打开?

这是使用Firefox 5.0,但如果您知道任何跨浏览器的差异,我会感激警告!

1个回答

56

首先,如果你将SVG嵌入<img>标签中,浏览器不会打开链接,也不会运行在<img>内部的脚本,因为你嵌入的是一张图片,而且很可能你的图片会出现在<a>标签内,你不能在链接中放置链接。

要使链接在新标签页中打开,可以使用HTML中的target属性,或使用xlink特定的xlink:show属性,并将值设置为new。SVG规范说明如下

[xlink:show]属性提供了向后兼容的SVG 1.1文档,在XLink感知处理器中提供文档。在冲突的情况下,目标属性具有优先级,因为它可以表达更广泛的值。

target属性的值包括:

  • _replace
  • _self
  • _parent
  • _top
  • _blank

因此,在SVG中,你需要按照以下方式编写:

<a xlink:href="http://example.com" target="_blank">[...]</a>

但目前所有能够显示SVG的浏览器都支持xlink:showtarget属性(尽管我没有在IE9中测试过)。


6
他想在包含的窗口中打开它。我认为你需要使用"_parent"或"_top"。 - gilly3
8
非常感谢您的两个答案。在我的Graphviz HTML标签中添加"target='_top'"可以得到我想要的结果。 - mojones
3
注意,就像示例中的那样,必须使用“target=”而不是“xlink:target=”(即使你想要使用“xlink:href=”)。这让我有点困惑。 - Lars Kemmann
2
@cazort 我不确定你问题的确切答案,但是根据你嵌入SVG的方式,你可以在HTML文档的<head>元素中添加<base target="_blank" />,这样所有的链接都将在新标签页中打开。如果你在HTML的iframe中嵌入SVG应该会有所帮助。 - Spadar Shut
1
谢谢!将基础目标设为“_blank”无效。我正在使用<object>嵌入SVG。我不知道是否有办法用这种方法做到这一点。 - cazort
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接