这种情况不常发生:为什么这个JavaScript代码只在Chrome中被破坏?

时间:2010-12-01 04:57:31

标签: javascript google-chrome markdown wmd

我已经决定让我爱上Stack Overflow上的Markdown编辑器。这是约翰弗雷泽showdown.js的一个分支。我想在我的一个项目上使用这个解析器,但在分析了源代码之后,我发现它对我来说有点麻烦。

所以我着手修改JavaScript代码以满足我的需求,即:

  1. 摆脱所有全局变量,
  2. 将变量声明与每个范围的var组合,
  3. 将连接更改为数组连接,
  4. 旨在使缩小的源更小的各种其他调整。
  5. 除了一个小问题外,我的所有内容都运行得很漂亮:command.doList功能中的自动完成代码在Chrome中很不稳定。我已经在Internet Explorer,FireFox和Safari中测试了一切正常工作。我已将此事分解为以下几行:

    // Get the item prefix - e.g. " 1. " for a numbered list, " - " for a bulleted
    // list.
    getItemPrefix = function () {
        var prefix;
        if (isNumberedList) {
            // the `s` variable is just a string space.
            prefix = [s, num, '. '].join('');
            num++;
        } else {
            prefix = [s, bullet, s].join('');
        }
        return prefix;
    };
    
    // Fixes the prefixes of the other list items.
    getPrefixedItem = function (itemText) {
        // The numbering flag is unset when called by autoindent.
        if (isNumberedList === undefined) {
            isNumberedList = /^\s*\d/.test(itemText);
        }
    
        // Renumber/bullet the list element.
        // THE FOLLOWING LINES COMMENTED OUT TO FIX A BUG.
        //itemText = itemText.replace(/^[ ]{0,3}([\*\+\-]|\d+[.])\s/gm,
            // function () { return getItemPrefix(); });
        return itemText;
    };
    

    最后两条注释掉的线路阻止Chrome表现得很糟糕,但编号列表不再自动增加。一旦我取消评论,所有主流浏览器都会开始正常工作,Chrome除外。 (Chrome变得疯狂并使用额外的编号和项目符号自动完成列表,在尝试使用无序列表时也会发生。)

    问题显然在Stack Overflow上不存在 here ,所以我希望这对我来说只是一个愚蠢的疏忽。 (或者Stack Overflow已经更新并修复了错误。)

2 个答案:

答案 0 :(得分:2)

您可以查看另一个WMD分支的fix(第32行)。

答案 1 :(得分:0)

你应该不需要在方括号中反斜杠* + - 你呢?这可能是Chrome遇到问题的原因。