2009-11-19 1 views
1

один, этот код работает:Я добавляю 10 функций к коду, я даже не звоню ни одному из них, но код перестает работать!

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); 
} 

Почему?

+2

Возможно, есть ошибки в коде, который вы вставили. Проверьте журнал ошибок Firefox, чтобы узнать, что-то сломается. – Bobby

+1

Вы пытались добавить только одну функцию за раз? Если на странице есть синтаксические ошибки, все Javascript перестанет функционировать. –

+0

Я нашел полезным вызвать 'toJavaScriptConsole()' прямо при загрузке вашего расширения (просто поместите его вверху вашего js-файла или в метод init(), если он у вас есть). Если вы * не видите, что отображается Консоль ошибок, это, вероятно, из-за синтаксической ошибки. Просто не забудьте удалить этот вызов, прежде чем упаковать и распространить расширение. – MatrixFrog

ответ

4
if (sitefound[0]) return sitefound[0] else return null; 

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

Try:

if (sitefound[0]) 
    return sitefound[0]; 
else 
    return null; 
+0

фигурные скобки не требуются, но их использование (в оригинале) могло бы сделать более ясным, что синтаксис был неправильным.Я часто пропускаю фигурные скобки, если у меня есть одно условие; но я один использую другое, я бросаю в колышки. –

+0

С фигурными фигурными скобками это могло быть сжато до одной строки. –

+0

С использованием правильного синтаксиса весь код JS можно сконденсировать в одну строку. Это не самый поддерживаемый в этом формате .... –

9

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

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

+0

Я удивлен, что у меня так много голосов. Кажется монотонным и раздражающим, и есть так много простых способов найти синтаксическую ошибку! –

5

Одна маленькая ошибка 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; 
} 

и один после categoryfound [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; 
} 
0

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

1

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

⌥⌘ + я,

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

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