Javascript Safari createPattern在SVG中失败:备选方案建议?

Javascript Safari createPattern在SVG中失败:备选方案建议?,javascript,html,canvas,svg,safari,Javascript,Html,Canvas,Svg,Safari,我使用SVG图像作为HTML5画布元素的背景模式,使用以下语法: var img = new Image(); img.onload = function() { var pattern = badge.createPattern(img, 'repeat'); badge.fillStyle = pattern; // draw 'badge' shape badge.fill(); }; img.src = '../flags/iso/'+coun

我使用SVG图像作为HTML5画布元素的背景模式,使用以下语法:

var img = new Image();
img.onload = function() {
    var pattern = badge.createPattern(img, 'repeat');
    badge.fillStyle = pattern;
    // draw 'badge' shape
    badge.fill();
    };  
img.src = '../flags/iso/'+country+'.svg';
这在Firefox和Chrome中可以正常工作,但在Safari(7.0.3)中背景为空白(白色)。对背景图像使用png或jpg的效果与Safari等人的预期一样——只有SVG渲染不正确

感谢您的指点。还有很多关于Safari SVG bug的其他报告,但我不确定这是否是特定的,或者与画布实现有关

更新:这是,但似乎没有采取任何行动。问题是使用SVG创建模式

如果Safari无法使用createPattern加载SVG,除了将图像加载到画布中的不规则形状(多边形)中作为背景图像外,还有其他方法吗?

可能的解决方法 您可以尝试先通过画布从SVG创建位图图像,然后将该画布用作模式的图像源:

var img = new Image();
img.onload = function() {

    // canvas image source for pattern:    
    var svgCanvas = document.createElement("canvas");
    svgCanvas.width = this.width;
    svgCanvas.height = this.height;

    // draw in the SVG to canvas
    var svgCtx = svgCanvas.getContext("2d");
    svgCtx.drawImage(this, 0, 0, this.width, this.height);

    // use canvas as image source instead
    var pattern = badge.createPattern(svgCanvas, 'repeat');
    badge.fillStyle = pattern;

    // draw 'badge' shape
    badge.fill();
};  
img.src = '../flags/iso/'+country+'.svg';

你可以在这里报告狩猎虫:@robert longson-thank,发现它是在2010年报告的,但没有采取任何行动:工作就像一个符咒,谢谢。这也解决了我在调整背景图像大小时遇到的一个后续问题,所以要加倍感谢。