经过一番研究,我发现如果 Chrome 和 Opera 具有绝对路径,则它们会在 foreignObject 中渲染图像,而 Firefox 仅在它们为 data-uri 格式时才会渲染图像,因为它不加载任何外部资源。
我已经尝试了几种方法,但我找不到一种方法来检测这种行为,例如我试图检查 foreignObject 中图像的尺寸,但它们总是正确的,Firefox 只是简单地绘制了一个透明的矩形图片尺寸。
你知道怎么做吗?
CODE 这种情况很难重现,但是可以这样测试:
- 转到谷歌主页
- 在 Chrome 上打开 firebug 控制台或 javascript 控制台
- 执行这段代码:
:
var img = new Image();
img.src="data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1MzgnIGhlaWdodD0nMTkwJz48Zm9yZWlnbk9iamVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJz48aW1nIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLml0L2ltYWdlcy9zcnByL2xvZ28xMXcucG5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9Im1hcmdpbjogMHB4OyIvPjwvZm9yZWlnbk9iamVjdD48L3N2Zz4=";
document.body.appendChild(img);
在 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>