Проблемы Raphael JS в Firefox 3.0.12

Я довольно много работал с библиотекой Raphael SVG/VML, на сайте указано, что она поддерживает Firefox 3.0+.

Однако я столкнулся с проблемой при использовании последней версии Raphael и jQuery 1.8.3.

Я могу создать бумагу var paper = Raphael('divID',500,500); и создать на ней фигуры, например var rect1 = paper.rect(0,0,100,100);

Проблема возникает, когда я затем пытаюсь получить ограничивающую рамку для этого прямоугольника. В консоли я получаю this.join не является функцией

Я также получаю ту же проблему при создании путей.

Судя по тому, что я вижу, это проблема с функцией getBBox или функцией pathToString. Кто-нибудь сталкивался с этой проблемой и знает ли кто-нибудь, что я могу изменить, чтобы решить эту проблему?

РЕДАКТИРОВАТЬ: Причина, по которой я специально спрашиваю о 3.0.12, заключается в том, что у моего клиента нет другого выбора, кроме как работать в этом браузере, к сожалению.


person Jon Taylor    schedule 06.12.2012    source источник


Ответы (1)


Проблема внутри функции clone внутри библиотеки Raphael. Эта функция не клонирует должным образом функции в старой версии Firefox. Одним из решений является изменение кода для возврата функций без их клонирования (так же, как это делается с простыми типами JavaScript).

Итак, ваш окончательный код для функции clone Рафаэля будет выглядеть так:

function clone(obj) {
    if (Object(obj) !== obj || typeof obj === 'function') {
        return obj;
    }
    var res = new obj.constructor;
    for (var key in obj) if (obj[has](key)) {
        res[key] = clone(obj[key]);
    }
    return res;
}

Надеюсь, это ничего не сломает.

person Inferpse    schedule 08.12.2012
comment
Хм, да, я смотрел на метод клонирования, но, честно говоря, прошлой ночью я был на сцене, где был готов спрыгнуть с моста вместо того, чтобы пытаться понять проблему, ха-ха. Я попробую это и отчитаюсь :). - person Jon Taylor; 08.12.2012
comment
Кажется, это действительно решает проблему. Я принял ответ, но дам вам знать, если в результате что-то пойдет не так. Однако у меня есть несколько довольно сложных примеров, работающих с вашим модифицированным методом клонирования в Chrome, Firefox и IE без проблем. - person Jon Taylor; 08.12.2012
comment
Я не думаю, что будут какие-то проблемы, из-за особенностей функций внутри JavaScript - не должно быть проблем с областью видимости и this, так что... Удачи. Кстати, возможно, в более старой версии Raphael такой проблемы нет... - person Inferpse; 08.12.2012