2016-07-01 9 views
0

Я столкнулся с проблемой, которая вызывает у меня некоторые головные боли за последние несколько дней.Rappid.js - getScreenCTM возвращает null в Firefox

У меня есть веб-страница, где пользователи могут создавать своего рода диаграмму последовательности (используя joint.js и rappid.js v1.7.1). Идея заключается в том, что пользователь имеет некоторые доступные узлы, которые можно перетащить на холст (бумага в joint.js), а затем эти узлы могут быть связаны друг с другом.

Функциональность на самом деле отлично работает в Chrome и Internet Explorer, но я не могу заставить ее работать в Firefox (версия 47.0.1).

Как только я бросаю узел на полотне я получаю следующее сообщение об ошибке: enter image description here

Как сказал эта ошибка возникает только в Firefox и с помощью отладчика функций Firefox и Chrome я был в состоянии сказать, что «то же самое «объект получает матрицу SVG в Chrome, а ее значение - в Firefox.

Узел содержит SVG Содержимое изображения:

defaults: joint.util.deepSupplement({ 
    type: 'stations.StartPoint', 
    attrs: { 
     '.stations-point-title-text': { 'text': 'Start' }, 
     '.stations-point-content-image': { "xlink:href": "data:image/svg+xml;base64,..." } 
    } 
}, stations.Point.prototype.defaults) 

строка кода в rappid.js, где происходит ошибка

getTransformToElement: function (a) { 
      return a.getScreenCTM().inverse().multiply(this.node.getScreenCTM()) 
     }, 

Кто-нибудь имел подобный опыт с joint.js? Любая помощь или советы будут оценены.

Благодаря

EDIT: Я нашел решение этой проблемы, хотя я должен признаться, я не совсем понимаю. После анализа демо-программы, которая работала в Firefox, я понял, что разница в том, что я не вызывал функцию Navigator.render() в своем коде (поскольку я не пользовался навигатором). Добавление этого вызова разрешило мою проблему. (http://jointjs.com/rappid/docs/ui/navigator)

+0

Является элементом, прикрепленным к документу? Отображается ли оно: нет? –

+0

@RobertLongson Да, он прикреплен к документу и отображению: block –

+0

Отображаются ли какие-либо из его предков: нет? Я думаю, вам нужно создать здесь [mcve]. –

ответ

0

После переноса в 0.9.5 проблема исчезает. Но не забудьте указать в свой index.html

< script > SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function(toElement) { return toElement.getScreenCTM().inverse().multiply(this.getScreenCTM()); };</script >

+0

У Firefox есть встроенная реализация getTransformToElement и должна не нужен этот код. Chrome понадобится, но этот вопрос касается Firefox. –