Firefox 18打破了mootools 1.2.5选择器引擎

时间:2013-01-10 21:20:32

标签: firefox mootools

在这里使用jsfiddle示例:http://jsfiddle.net/CfJyd/

问题只出现在我知道的Firefox 18中。

以下html:

<div class="test">Test Div</div>
<div class="testIgnore">This should stay the same</div>

用这个js:

window.addEvent('domready',function() {
    $$('.test').set('html','Only Test should update');
});

此输出结果:

Only Test should update
Only Test should update

目前升级到Mootools 1.4.5不是一个选项,因为有很多使用1.2.5的插件,有人能指出我正确的方向进行修复吗?

3 个答案:

答案 0 :(得分:8)

我在这里找到了答案:https://groups.google.com/forum/#!msg/mootools-users/W7MHwTFHYQ4/B4HcR951XQYJ

在javascript中的任何地方添加以下代码 - 我将它添加到mootools上方,并且它完美运行:

String.prototype.contains = function(string, separator){
    return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : String(this).indexOf(string) > -1;
};

答案 1 :(得分:4)

已知错误。如果我没记错的话,那就是早期在Gecko中引入提议的 ES和声String.prototype.contains,它与1.2.5中的那个有一个不同的第二个参数

快速解决方法是在加载MooTools之前说,执行delete Sting.prototype.contains,以便重新定义它。从1.3开始,这已经不再是受保护的原型方法,并且已经正确地重新定义。我认为大约6个月之前FireFox的一个人在回购时可能会出现一个错误,因为它很快就会降级到FF 17 ......

请参阅:https://bugzilla.mozilla.org/show_bug.cgi?id=789036#c23

即便是Brendan Eich也对此发表评论,并暗示它可能会在18.0.1被禁用,因为它过早被采用。

答案 2 :(得分:2)

有关此问题的更多背景信息:MooTools 1.2.x was broken by adding String.prototype.contains

解决方案是使用其他评论中的解决方法或升级到MooTools 1.3或1.4