当前位置: 首页 > 面试题库 >

在包含SVG标记元素的页面上使用基本标记无法呈现标记

禄奇希
2023-03-14
问题内容

尝试在基于SVG的可视化中使用SVG标记元素时遇到问题。我正在将更改添加到Web应用程序中,该更改恰好在每个页面上都包含一个基本标记,以便对CSS文件,javascript文件等的任何引用都可以是相对的。

我下面有一些示例代码可以重现该问题。有一个线元素和一个标记元素定义。该标记元素由其’marker-
end’属性中的行通过uri和标记id引用。没有基本标签,箭头显示正常。使用基本标签时,它不会显示。原因是因为基本标记更改了浏览器解析url的方式。即使对于该行的marker-
end属性中指定的基于简单id的url,也是如此。

有什么办法可以解决这个问题而不必删除基本标记?

我无法真正删除它,因为在我正在开发的产品中根深蒂固地使用了它。我的网络应用程序需要支持Firefox,Chrome和IE9
+。Firefox和chrome都会产生此问题。IE可以正常工作(即,箭头标记显示)。

<html>
    <head>
    <base href=".">
    <style>
    .link { stroke: #999; stroke-opacity: .6; }
    marker#arrow { fill: black; }
    </style>
</head>
<body>
    <svg width="100%" height="100%">
        <defs>
            <marker id="arrow" viewBox="0 -5 10 10" refX="0" refY="0" markerWidth="20" markerHeight="20" orient="auto">
                <path d="M0,-5L10,0L0,5"></path>
            </marker>
        </defs>
        <line x1="100" y1="100" x2="333" y2="333" marker-start="url(#arrow)" class="link"></line>
    </svg>
</body>
</html>

问题答案:

HTML <base>元素用于说“解析所有相对URL,而不是相对于此页面,而是相对于新位置”。在您的情况下,您已经告诉它可以相对于带有HTML页面的目录进行解析。

SVG marker-mid="url(…)"属性是FuncIRI参考。当使用这样的值时url(#foo),通常会相对于当前页面解析相对IRI,查找具有fooid的元素。但是,当您使用时<base>,会更改其外观。

要解决此问题,请使用更好的值。由于您的基本引用是当前目录,因此您可以简单地使用当前文件的名称:

<line … marker-mid="url(this_page_name.html#arrow)" />

如果您的<base>href不同于您显示的href,例如:

<base href="http://other.site.com/whee/" />

那么您将需要使用绝对href,例如

<line … marker-mid="url(http://my.site.com/this_page_name.html#arrow)" />


 类似资料:
  • 我有许多大的SVG文件(用在线工具减小大小后大约有200kb)。我真的不希望访问者每次访问时都从我的服务器上下载所有的文本。我想利用CDN和varnish缓存。 如果我使用SVG标签,浏览器、CDN或Varish都会将svg代码缓存在html文档中。SVG没有src属性。 如果我使用图像标记,它将被缓存,但我无法利用SVG标记的preserveAspectRatio和viewBox。在调整浏览器窗

  • 我相信这是与我的配置有关,但我不知道它是什么。 我正在macOS High Sierra上使用IntelliJ IDEA Ultimate 2018.1。 这是我的pom.xl 和XHTML页面: 正如我上面提到的,

  • 对于以下超文本标记语言: 我们可以将第一行与这个xpath匹配-- 我们无法将第2行与此xpath匹配-- BR标记正在运行。Selenium IDE的“Select”功能可以获取DIV标记xpath,但不能深入到它所包含的文本中。 有什么建议吗?

  • 问题内容: 我想做一些非常简单的事情,像这样: 我想我已经在某个地方看到了完全做到这一点的代码。CSS和JS呢?可以使JPanel轻松支持这一点吗?是否有图书馆可以满足我的要求? 问题答案: 检查此处以了解如何向您的 JEdi​​torPane 添加CSS支持。您将需要一个HTMLEditorKit。 我不明白为什么您需要JEditorPane的JavaScript支持。它的基本用途是呈现以HTM

  • 我最近遇到了一个问题。 我需要在页面上找到一个包含特定文本的div标签。问题是,文本被内部链接标记分成两部分,因此超文本标记语言树看起来像: 为了唯一地标识div标记,我需要div文本的两部分。当然,我会想出类似XPath的方法: 但是,它不起作用,第二部分找不到。 什么是唯一描述这种标签的最佳方法?

  • 问题内容: 在大多数情况下,拥有父标签不是问题。 但在某些情况下,在一个渲染函数中没有兄弟元素而没有父元素是有意义的,尤其是在使用表的情况下,您不想将表行包装在中。 第二个示例给出以下错误:。 我如何渲染两个同级元素而不将它们包装在a 或类似的东西中? 问题答案: oo!React团队最终添加了此功能。从React v16.0开始,您可以执行以下操作: 请参阅完整的博客文章,此处解释了“新的渲染返