Chrome-Erweiterung "$ ist nicht definiert" - Fehler
Bin ich immer die Fehlermeldung "der$ ist nicht definiert", wenn ich arbeite auf meinem chrome-Erweiterung.
Dies ist mein manifest-Datei:
{
"name": "X",
"description": "Snip this page",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts":[{
"matches" : ["<all_urls>"],
"js": ["jquery-2.0.2.js","jquery.Jcrop.js"],
"css": ["jquery.Jcrop.min.css"]
}],
"browser_action": {
"default_title": "Snip this page"
},
"manifest_version": 2
}
Dies ist mein background.js Datei:
chrome.browserAction.onClicked.addListener(function(tab){
//No tabs or host permissions needed!
chrome.tabs.executeScript({
file: 'content.js'
});
});
Schließlich die Datei, wo der Fehler ausgelöst wird: content.js
console.log('1');
var jcropapi, boundx, boundy;
$('body').attr('id', 'target');
$(document).ready(function(){
$('target').Jcrop();
console.log('4');
document.onkeydown = function(){
if(window.event.keyCode==13){
console.log('enter');
}
};
});
Aus meinem Verständnis dieses happends, weil JQuery nicht geladen. Aber ich bin laden es richtig im manifest, und jquery.js ist auch die erste Datei, die aufgerufen wird in der manifest-content-Skript. Bitte helfen Sie mir bei der Fehlersuche. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies geschieht, wenn das Skript, das Aufrufe von jQuery geladen vor jQuery.js laden. In dem gegebenen Beispiel von der Frage, submitter, der hintergrund lädt, bevor der Inhalt Skript, und das content-Skript geladen jQuery selbst nach der hintergrund-Skript ruft für jQuery. Dieses Beispiel kann behoben werden, indem die hintergrund-script laden von jQuery selbst, etwa so:
Beachten Sie auch, dass die js-Dateien im manifest aufgeführten geladen werden, in der Reihenfolge, wie Sie erscheinen. Zum Beispiel, sagen wir mal, dass Sie eine Datei haben, "script.js" enthält:
Wenn Sie schreiben, Ihre manifest, wie dieses (FALSCHE), erhalten Sie die Fehlermeldung "$ ist nicht definiert":
Ändern des manifests zu diesem (RECHTS) wird den Fehler beheben:
Beachten Sie, dass "jquery.js" jetzt vor "script.js" und ist daher als erstes geladen.
Kann man das problem scheinen intermittierende, da beide Skripte geladen werden, fast zur gleichen Zeit. Wenn Sie das Skript ändern, so dass der Aufruf von jQuery ist unter einige andere javascript-Befehle, die Zeit dauert es für die anderen Befehle ausgeführt werden können, gerade genug Zeit für jQuery.js laden beenden. So zum Beispiel, wenn Sie schrieb das manifest der falsche Weg, über, man konnte auch technisch beheben Sie den Fehler durch ändern der script.js Datei etwa so:
Die 1 Sekunde Verzögerung gibt jQuery.js genug Zeit, um zu laden, aber das ist natürlich nicht die ideale Lösung!
Ich habe keine Ahnung, wie es funktioniert, aber irgendwie, wenn ich geändert JQuery zu seiner minimierten version und es funktioniert jetzt.
Gibt es einen Konflikt irgendwo. Es beheben, durch das ersetzen aller Instanzen von
$
mitjQuery
.jQuery
für$
(zumindest mit jQuery 1.7).