【问题标题】:Raphael JS problems in Firefox 3.0.12Firefox 3.0.12 中的 Raphael JS 问题
【发布时间】:2012-11-25 02:18:55
【问题描述】:

我一直在使用 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 is not a function

我在创建路径时也遇到了同样的问题。

据我所知,getBBox 函数或 pathToString 函数似乎有问题。有没有人遇到过这个问题,有没有人知道我可以改变什么来解决这个问题?

编辑:我特别询问 3.0.12 的原因是我的客户别无选择,只能在该浏览器上运行,很遗憾。

【问题讨论】:

    标签: javascript raphael firefox-3


    【解决方案1】:

    问题出在 Raphael 库中的 clone 函数内部。此函数在旧版本的 Firefox 中无法正确克隆函数。一种解决方案是修改代码以返回函数而不克隆它们(就像使用简单的 JavaScript 类型一样)

    因此,Raphael 的 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;
    }
    

    我希望这不会破坏任何东西。

    【讨论】:

    • 嗯,是的,我看过克隆方法,但老实说,前几天晚上我正准备从桥上跳下来,而不是试图找出问题哈哈。我会试试这个并报告:)。
    • 它似乎确实解决了这个问题。我已经接受了答案,但如果结果出现任何问题,我会通知您。但是,我确实有一些相当复杂的示例在 chrome 和 firefox 和 IE 上使用修改后的克隆方法运行,没有问题。
    • 我认为不会有任何问题,因为 JavaScript 内部函数的性质 - 范围和 this 应该没有问题,所以......祝你好运。顺便说一句,也许旧的拉斐尔版本没有这样的问题......
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2013-04-04
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多