2009-11-19 9 views
1

seul, ce code fonctionne:J'ajoute 10 fonctions à un code, je n'appelle même pas l'une d'entre elles, mais le code cesse de fonctionner!

CustomButton = { 

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

} 

j'ajouter le code ci-dessous et le code diaphs travail:

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

Pourquoi?

+2

Vous avez peut-être des erreurs dans le code que vous avez inséré. Vérifiez le journal d'erreurs de Firefox pour voir si quelque chose se brise. – Bobby

+1

Avez-vous essayé d'ajouter une seule fonction à la fois? S'il y a des erreurs de syntaxe n'importe où dans la page, alors tout Javascript cessera de fonctionner. –

+0

J'ai trouvé utile d'appeler 'toJavaScriptConsole()' juste quand votre extension se charge (placez-la simplement en haut de votre fichier js, ou dans une méthode init() si vous en avez une). Si vous * ne voyez pas * la console d'erreur apparaître, c'est probablement à cause d'une erreur de syntaxe. N'oubliez pas de supprimer cet appel avant de le distribuer et de le distribuer. – MatrixFrog

Répondre

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

Cette syntaxe n'est pas valide.

Essayez:

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

Les accolades ne sont pas obligatoires, mais leur utilisation (dans l'original) aurait pu rendre plus clair que la syntaxe était erronée.Je saute souvent les accolades si j'ai une condition; mais moi j'en utilise un autre, je jette dans les curlies. –

+0

Avec des accolades, cela aurait pu être condensé à une ligne –

+0

Avec l'utilisation de la syntaxe correcte, tout le code JS peut être condensé en une ligne. Ce n'est pas le plus maintenable dans ce format .... –

9

Essayez d'ajouter vos fonctions au fur et à mesure. voyez à quelle fonction votre code cesse de fonctionner. puis videz le contenu de la fonction uniquement pour le remettre avec des morceaux à la fois. vérifiez à nouveau où votre code cesse de fonctionner. A propos il devrait y avoir une erreur de syntaxe. Mais comme le suggère Bobby, le plus simple est d'essayer Firefox Errorlog, ou peut-être Firebug.

+0

Je suis surpris que vous ayez reçu autant de votes. Semble monotone et ennuyeux, et il y a tellement de façons plus faciles de trouver une erreur de syntaxe! –

5

Une petite erreur JavaScript peut casser beaucoup de choses. Vous avez oublié d'ajouter des points-virgules à deux endroits.

Il doit y avoir un point-virgule après sitefound [0] ici:

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

et un après categoryfound [1] ici:

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

La virgule après la fonction CustomButton peut casser le code le code dans IE. En outre, si vous utilisez CustomButton la première fois ici, vous devez l'introduire avec var. Je sais que ce ne sont pas les problèmes que vous avez demandés, mais sinon, tout semble correct.

1

Si vous êtes un utilisateur Mac, ouvrez (une version plus récente) de Safari et cliquez

⌥⌘ + i,

qui ouvre un grand panneau avec beaucoup de graphiques et de données sur l'interaction client-serveur. Vous pouvez également voir et localiser les erreurs javascript, ou déboguer javascript dans une console directement. soigné. Pour Firefox, essayez l'excellent firebug pour voir, ce qui n'a pas fonctionné où .. dans leurs propres mots: [avec Firebug] .. vous pouvez éditer, déboguer, et surveiller CSS, HTML, et JavaScript en direct dans n'importe quelle page Web .