2017-06-23 6 views
0

MS Edge hat this bug. Ich scheint das Attribut direction in SVG zu ignorieren, so dass die Einstellung auf "rtl" das gleiche Ergebnis liefert wie bei "ltr" (siehe Beispiel im Fehlerfall). Die anderen großen Browser scheinen es richtig zu unterstützen.Feature-Erkennung des SVG-Richtungsattributs

Wie kann ich Feature-Erkennung von diesem in Javascript tun? Ich habe versucht:

var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); 
var supported = svg.style.direction !== undefined; 

Aber supported kehrt in Rande wahr, obwohl es eindeutig nicht der Fall ist.

Jeder Vorschlag zur Erkennung ist direction in SVG funktioniert gut?

+1

Sie müssten ein Attribut eines 'svg' finden, das sich ändert, wenn' direction' auf 'rtl' eingestellt ist, das sich von dem auf' ltr' unterscheidet. Ich bin nicht fließend genug in SVG oder Schreibe Richtungen, um Ihnen zu sagen, was das ist, aber Sie könnten versuchen, eine zu finden, die in Browsern ändert, die 'Richtung' vollständig unterstützen und das überprüfen ... Vielleicht etwas mit [der zu tun Fehler mit dem in Ihrer Frage verknüpft] (https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12133259/) –

+0

@MikeMcCaughan ist auf etwas da - ich frage mich, ob Sie etwas berechnen könnten Verwenden Sie, sagen wir, ein verstecktes '' Element in der Svg. – jack

+0

Interessante Vorschläge, ich werde sie versuchen. – elnigno

Antwort

2

Sie könnten ein Textobjekt erstellen, das Text von rechts nach links enthält. Dann ermitteln Sie die Dimensionen dieses Textes und sehen Sie, ob er sich in die entsprechende Richtung erstreckt.

Etwas wie:

var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); 
 
var text = document.createElementNS("http://www.w3.org/2000/svg", "text"); 
 
text.setAttribute("direction", "rtl"); 
 
text.textContent="X"; 
 
svg.appendChild(text); 
 
document.body.appendChild(svg); 
 
var supported = text.getBBox().x < 0; 
 
console.log("supported="+supported);

Dies gibt true in Chrome und Firefox, und false in IE11 und Kante stricken.

Sie müssen jedoch das SVG an eine Seite anhängen. Hoffentlich ist das kein Problem für dich.

+0

Danke! Ich habe es leicht modifiziert, indem ich den 'svg'-Knoten direkt nach der Einstellung' supported' mit 'svg.parentNode.removeChild (svg);' entfernt habe und _ anstelle von X als Text verwende, da es etwas weniger aufdringlich ist. Ich werde einige Zeit warten, um zu sehen, ob andere Antworten eingehen, bevor ich diese akzeptiere. – elnigno

+0

Es muss nicht sichtbar sein. Sie können es immer absolut an einer Stelle vom Bildschirm positionieren. Oder mach die Opazität null. –

+0

Das ist richtig und noch besser, danke. – elnigno

Verwandte Themen