我有一个html文件与一些javascript本地脱机在我的电脑上,并希望嵌入一个svg图标在html文件中显示在浏览器中,而不需要一个额外的favicon.svg
文件。有可能得到这个工作一些如何?
<html>
<head>
<link rel="icon" type="image/svg+xml" href="favicon.svg">
...
所以我想在html页面中嵌入favicon.svg
而不是<link rel="icon" type="image/svg+xml" href="favicon.svg">
。
这里是favicon.svg的一个例子
<svg
width="256"
height="256"
viewBox="0 0 256 256">
<rect
style="fill:#FF3010;stroke:none"
width="256"
height="256"
x="0"
y="0" />
</svg>
根据Embed SVG icon into html,我尝试了
只需粘贴SVG内容:
<link rel="icon" href="data:image/svg+xml,<svg width="256" height="256" viewBox="0 0 256 256"><rect style="fill:#FF3010;stroke:none" width="256" height="256" x="0" y="0" /></svg>">
已将双引号("
)替换为单引号('
):
<link rel="icon" href="data:image/svg+xml,<svg width='256' height='256' viewBox='0 0 256 256'><rect style='fill:#FF3010;stroke:none' width='256' height='256' x='0' y='0' /></svg>">
已将特殊字符转换为%XX格式:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20width=%22256%22%20height=%22256%22%20viewBox=%220%200%20256%20256%22%3E%3Crect%20style=%22fill:#FF3010;stroke:none%22%20width=%22256%22%20height=%22256%22%20x=%220%22%20y=%220%22%20/%3E%3C/svg%3E">
将SVG内容翻译成Base64:
<link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxyZWN0IHN0eWxlPSJmaWxsOiNGRjMwMTA7c3Ryb2tlOm5vbmUiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB4PSIwIiB5PSIwIiAvPjwvc3ZnPg==">
但在所有情况下,浏览器中均未显示favicon。
我试了火狐ESR102.5.0和铬104.0.5112.105。
作为额外favicon.svg
文件的favicon工作正常,但嵌入的数据不工作。
2条答案
按热度按时间vc9ivgsu1#
你需要告诉浏览器它将要显示什么样的图像/文档。对于SVG文档来说,这意味着要包括一个XML声明和XML名称空间。
因此,您的SVG文档应类似于:
然后像你写的那样把它写进去:
您可以随时通过在浏览器中打开SVG来测试它是否工作。
现在,我只在Firefox中使用base64数据URL进行了测试。也许在某些情况下,您会遇到源地址(CORS)的问题。为了缓解这个问题,您需要在HTTP响应中使用一个Content-Security-Policy,或者至少在HTML中使用一个Content Security Policy meta元素来声明数据URL是正确的。如下所示:
在这里,您可以看到策略中提到的
data:
模式。ajsxfq5m2#
是的,谢谢你。只是包括名称空间的东西做的技巧
第一个
谢谢你!