Greasemonkey Неопределенные ошибки JS - PullRequest
0 голосов
/ 16 июля 2011

Я получаю неопределенные ошибки в большинстве строк в этом скрипте greasemonkey.Я тестировал на Chrome и Firefox, с одинаковыми результатами на обоих.Я не могу понять, почему.Я немного новичок в JavaScript, но чувствую, что это довольно просто, и я что-то упускаю.

Просматривая некоторые связанные страницы, я не уверен, что этот Greasemonkey связан.Весьма вероятно, что это общая проблема JavaScript.Вот сценарий целиком.

// ==UserScript==
// @name AutoHotkey Forum Line Numberer
// @namespace http://apps.aboutscript.com/gm/
// @description Add line numbers to AutoHotkey forum code boxes
// @icon http://apps.aboutscript.com/gm/linenumbers/autohotkey.png
// @include http://www.autohotkey.com/forum/viewtopic.php*
// @include http://www.autohotkey.com/forum/posting.php
// @version 0.5
// ==/UserScript==

var linenumbers = {

    count_lines: function(text) {
        var lines = text.split('\n');
        return (lines.length);
    },

    make_div: function(max) {
        var contents = "";
        for (i=1; i<=max; i++) {
            contents += '<span style="margin:0 auto 0 auto; ';
            if (i%2) {
                contents += 'color:#FFAAAA; '
            } else {
                contents += 'color:#FFCCCC; '
            }
            contents += '">' + i + '</span><br>';
        }
        if (max <= 15) {
            contents = '<div style="min-width:25px; height:200px; overflow-    y:auto;">' + contents + '</div>';
        } else {
            contents = '<div>' + contents + '</div>';
        }
        return contents;
    },

    add_numbers: function() {
        var code_tables = document.getElementsByClassName('code');
        for (i in code_tables) {
            var td = code_tables[i];
            var div = td.firstChild;
            var codetext = div.innerText;
            var total_count = this.count_lines(codetext);
            var to_inject = make_div(total_count);
            var newtd = document.createElement('td');
            newtd.innerHTML = to_inject;
            document.body.insertBefore(newtd, td);
        }
    }
};

linenumbers.add_numbers();

Итак, мои вопросы: в чем проблема?Как я могу это исправить?Как я могу предотвратить это в будущем?

Спасибо,

Фрэнки (разбор)

Кстати, я думаю, что тег 'greasemonkey' применяется, и я удивленэто не существуетЕсли у вас 1500+ повторений, добавьте его.

1 Ответ

0 голосов
/ 16 июля 2011

var to_inject = make_div(total_count); Вы забыли это.var to_inject = this.make_div(total_count);

И вы также не объявили i:

for (i in code_tables) { => for (var i in code_tables) {

for (i=1; i<=max; i++) { => for (var i=1; i<=max; i++) {

поэтому, когда add_numbers вызовет make_div, он заработает, потому что они оба будут зацикливаться на одной и той же переменной i.

...