foreignObject内绝对url图像的特征检测

mck*_*k89 9 javascript svg image browser-feature-detection

经过一番研究后,我发现Chrome和Opera如果有绝对路径就会在foreignObject中渲染图像,Firefox只有在数据为uri格式时才渲染图像,因为它不会加载任何外部资源.

我已经尝试了几种方法,但我找不到一种方法来检测这种行为,例如我试图检查foreignObject中图像的尺寸,但它们总是正确的,Firefox只是绘制一个透明的矩形图片尺寸.

你知道怎么做吗?

代码 这种情况很难重现,但你可以用这种方式测试它:

  • 转到谷歌主页
  • 在Chrome上打开firebug控制台或javascript控制台
  • 执行此代码:

:

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)

Zah*_*med 1

如果用户代理(浏览器)支持此功能不可用,您可以使用回退技术,因此,如果浏览器不支持此功能,将呈现“不支持外来对象”:

<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,表示定义该功能的规范的版本。