2012-06-20 5 views
2

Я использую элемент foreignObject в SVG, однако IE9 не поддерживает этот элемент. Я ищу способ обнаружить эту функцию. Modernizr не обнаруживает эту функцию, и кажется, что я не могу использовать createSVGForeignObject (недоступный в SVGSVGElement), как это делают для прямоугольника (createSVGRect).Функция обнаружения foreignObject в SVG

Спасибо!

+0

Просто чтобы быть ясным: 'createSVGRect()' не создает прямой элемент, он создает прямой объект. Для создания элементов просто используйте 'document.createElementNS (...)'. –

ответ

3

Это должно работать, если вы хотите использовать foreignObject, поскольку он объединяет содержимое HTML ...

<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 foreignObject 
    </text> 
</switch> 

requiredExtensions часть proposed to w3c и this was their response. Firefox действительно реализует это, но я ничего не тестировал. Вы можете уйти с атрибутом требуемых атрибутов, как предлагает Эрик.

Если вы хотите проверить в JavaScript попробовать

var supported = document.implementation.hasFeature("www.http://w3.org/TR/SVG11/feature#Extensibility","1.1"); – 
+0

'http: // www.w3.org/TR/SVG11/feature # Расширяемость' - это featurestring, определенная в SVG 1.1 для элемента foreignObject, если это то, что вы хотите протестировать. Вы можете перечислить несколько значений в requiredExtensions (разделенные пробелами). –

+0

Спасибо за помощь. Эта техника предоставляет альтернативный рендеринг, если поддержка агента пользователя недоступна. Тем не менее, я искал решение Javascript (для условного кода). Это то, что я буду использовать '/SVGForeignObject/.test(document.createElementNS('http://www.w3.org/2000/svg ',' svg ') .appendChild (document.createElementNS (' http: // www.w3.org/2000/svg ',' foreignObject ')). toString()) ' –

+6

Просто' typeof SVGForeignObjectElement! ==' undefined'' тоже выполнит эту работу. –

2

Существует способ, чтобы проверить эту функцию в JS, следующий был заимствован из недавно совершить Modernizr (https://github.com/Modernizr/Modernizr/commit/ee836f083f29a9e634df731400027c24630a75f3):

 var toStringFnc = ({}).toString; 
     Modernizr.addTest('svgforeignobject', function() { 
      return !!document.createElementNS && 
       /SVGForeignObject/.test(toStringFnc.call(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'))); 
     }); 
Смежные вопросы