mck*_*k89 9 javascript svg image browser-feature-detection
经过一番研究后,我发现Chrome和Opera如果有绝对路径就会在foreignObject中渲染图像,Firefox只有在数据为uri格式时才渲染图像,因为它不会加载任何外部资源.
我已经尝试了几种方法,但我找不到一种方法来检测这种行为,例如我试图检查foreignObject中图像的尺寸,但它们总是正确的,Firefox只是绘制一个透明的矩形图片尺寸.
你知道怎么做吗?
代码 这种情况很难重现,但你可以用这种方式测试它:
:
var img = new Image();
img.src="data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1MzgnIGhlaWdodD0nMTkwJz48Zm9yZWlnbk9iamVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJz48aW1nIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLml0L2ltYWdlcy9zcnByL2xvZ28xMXcucG5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9Im1hcmdpbjogMHB4OyIvPjwvZm9yZWlnbk9iamVjdD48L3N2Zz4=";
document.body.appendChild(img);
Run Code Online (Sandbox Code Playgroud)
在Chrome上,徽标图像可见,而在Firefox上则不然.svg代码是base64编码的,这是原始代码:
<svg xmlns="http://www.w3.org/2000/svg" width="538" height="190">
<foreignObject width="100%" height="100%">
<img src="https://www.google.it/images/srpr/logo11w.png" xmlns="http://www.w3.org/1999/xhtml" style="margin: 0px;">
</foreignObject>
</svg>
Run Code Online (Sandbox Code Playgroud)
如果用户代理(浏览器)支持此功能不可用,您可以使用回退技术,因此,如果浏览器不支持此功能,将呈现“不支持外来对象”:
<switch>
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" requiredExtensions="http://www.w3.org/1999/xhtml">
<foreignObject >
</foreignObject>
</g>
<text font-size="10" font-family="Verdana">
No foreign Object supported
</text>
</switch>
Run Code Online (Sandbox Code Playgroud)
或者,如果你想在 JavaScript 中检测它,最简单的你可以尝试:
if(typeof SVGForeignObjectElement !== 'undefined')
alert('It support feature');
Run Code Online (Sandbox Code Playgroud)
或者你可以使用hasFeature
var flag= document.implementation.hasFeature("feature","version");
Run Code Online (Sandbox Code Playgroud)
参数
feature 是表示功能名称的 DOMString。
version 是一个 DOMString,表示定义该功能的规范的版本。
归档时间: |
|
查看次数: |
592 次 |
最近记录: |