Я добавляю в код 10 функций, я даже не вызываю их, но код перестает работать! - PullRequest
1 голос
/ 19 ноября 2009

В одиночку, этот код работает:

CustomButton = {

1: function () {
  alert("Just testing") 
  },

}

Я добавляю код ниже, и код выше перестает работать:

function getvisitingnow() {
    return document.location;
}
function getcontents(uri) {
    var req = new XMLHttpRequest();
    req.open('GET', uri, true);
    req.onreadystatechange = function (aEvt) {
        if (req.readyState == 4) {
            if(req.status == 200) {
                return req.responseText;
            }
        }
    };
    req.send();
}
function regexforsitefound(uri, searchcontents) {
    var re = new RegExp("\\<div class=g\\>.*?(?:\\<a href=\\\"?(.*?)\\\"?\\>.*?){2}\\</div\\>", "mi");
    var sitefound = searchcontents.match(re);
    if (sitefound[0]) return sitefound[0] else return null;
}
function regexforcategoryfound(uri, searchcontents) {
    var re = new RegExp("\\<div class=g\\>.*?(?:\\<a href=\\\"?(.*?)\\\"?\\>.*?){2}\\</div\\>", "mi");
    var categoryfound = searchcontents.match(re);
    if (categoryfound[1]) return categoryfound[1] else return null;
}
function regexfordomainname(uri) {
    var re = new RegExp("http://(?:[A-Za-z0-9-]+\\.)?[A-Za-z0-9-]+\\.[A-Za-z0-9-]+/?", "si");
    var domainname = uri.match(re);
    if (domainname) return domainname;
}
function regexforparentdir(uri) {
    var re = new RegExp("http://(?:[A-Za-z0-9-]+\\.)?[A-Za-z0-9-]+\\.[A-Za-z0-9-]+/?", "si");
    var parentdir = uri.match(re);
    if (parentdir) return parentdir;
}
function getcomparisonlink(visitingnow) {
    var searchuri = null;
    var searchcontents = null;
    var uri = visitingnow;
    while(true) {
        searchuri = 'http://www.google.com.br/search?';
        searchuri += 'q='+ uri +'&btnG=Search+Directory&hl=en&cat=gwd%2FTop';
        searchcontents = getcontents(searchuri);
        var sitefound = regexforsitefound(searchcontents);
        if (sitefound) {
            var categoryfound = regexforcategoryfound(searchcontents);
            if (categoryfound) {
                return categoryfound;
            }
        } else {
            var domainname = regexfordomainname(uri);
            if (!domainname) {
                var parentdir = regexforparentdir(uri);
                uri = parentdir;
            } else {
                return null;
            }
        }
    }
}
function clickedlink(event){
    var visitingnow = getvisitingnow(); 
    if (visitingnow) {
        getcomparisonlink(visitingnow);
        if (comparisonlink) {
            tab.open(comparisonlink);
        };
    }
}
function createBookmarkItem() {
    const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
    var item = document.createElementNS(XUL_NS, "toolbarbutton");
    item.setAttribute("id", "Testing-Doit-Button2");
    item.setAttribute("class", "bookmark-item pagerank");
    item.setAttribute("tooltiptext", "Do it!");
    item.setAttribute("oncommand", "testing_doit();");
    return item;
}
function placeBookmarkItem() {
    var toolbar = document.getElementById("PersonalToolbar");
    var button = createBookmarkItem();
    toolbar.appendChild(button);
}

Почему?

Ответы [ 5 ]

9 голосов
/ 19 ноября 2009

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

Но, как предполагает Бобби, проще всего попробовать Firefox Errorlog или, возможно, Firebug.

5 голосов
/ 19 ноября 2009

Одна маленькая ошибка JavaScript может сломать много вещей. Вы забыли добавить точки с запятой в двух местах.

Здесь должна быть точка с запятой после sitefound [0]:

function regexforsitefound(uri, searchcontents) {
    var re = new RegExp("\\<div class=g\\>.*?(?:\\<a href=\\\"?(.*?)\\\"?\\>.*?    ){2}\\</div\\>", "mi");
    var sitefound = searchcontents.match(re);
    if (sitefound[0]) return sitefound[0] else return null; 
}

и один после категории найден [1] здесь:

function regexforcategoryfound(uri, searchcontents) {
    var re = new RegExp("\\<div class=g\\>.*?(?:\\<a href=\\\"?(.*?)\\\"?\\>.*?){2}\\</div\\>", "mi");
    var categoryfound = searchcontents.match(re);
    if (categoryfound[1]) return categoryfound[1] else return null;
}
4 голосов
/ 19 ноября 2009
if (sitefound[0]) return sitefound[0] else return null;

Этот синтаксис недействителен.

Попробуйте:

if (sitefound[0])
    return sitefound[0];
else 
    return null;
1 голос
/ 19 ноября 2009

Если вы пользователь Mac, откройте (последняя версия) Safari и нажмите

⌥⌘ + i,

, которая открывает отличную панель с множеством графиков и данных о взаимодействии клиент-сервер. Вы также можете видеть и находить ошибки JavaScript или отлаживать JavaScript непосредственно в консоли. аккуратный.

Для Firefox, попробуйте отличный firebug , чтобы увидеть, что пошло не так, где ... своими словами: [с Firebug] .. вы можете редактировать, отлаживать и контролировать CSS, HTML и JavaScript жить на любой веб-странице.

0 голосов
/ 19 ноября 2009

Запятая после функции в CustomButton может нарушать код кода в IE. Кроме того, если вы используете CustomButton здесь впервые, вам следует ввести его с var. Я знаю, что это не те вопросы, о которых вы просили, но в остальном все кажется правильным.

...