2010-01-16 10 views
10

Ich habe the other question on here über das Laden von jQuery in einem Greasemonkey gesehen. Nachdem diese Methode versucht, mit dieser Aussage erfordern in meinem ==UserScript== tags:Greasemonkey @require jQuery funktioniert nicht "Komponente nicht verfügbar"

// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 

ich noch die folgende Fehlermeldung in Firefox Fehlerkonsole erhalten:

Error: Component is not available 
Source File: file:///Users/greg/Library/Application%20Support/ 
     Firefox/Profiles/xo9xhovo.default/gm_scripts/myscript/jquerymin.js 
Line: 36 

Dies stoppt mein Greasemonkey-Code aus ausgeführt wird. Ich habe sichergestellt, dass ich die @require für jQuery enthalten und meine js-Datei vor der Installation gespeichert, da die erforderlichen Dateien nur bei der Installation geladen werden.

Code:

// ==UserScript== 
// @name   My Script 
// @namespace  http://www.google.com 
// @description My test script 
// @include  http://www.google.com 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 
// ==/UserScript== 

GM_log("Hello"); 

Ich habe Grease 0.8.20091209.4 installiert auf Firefox 3.5.7 auf meinem MacBook Pro, Leopard (10.5.8). Ich habe meinen Cache (außer Cookies) gelöscht und alle anderen Plugins außer Flashblock 1.5.11.2, Web Developer 1.1.8 und Adblock Plus 1.1.3 deaktiviert.

Meine config.xml mit meiner Greasemonkey-Skript installiert:

<UserScriptConfig> 
<Script filename="myscript.user.js" name="My Script" 
namespace="http://www.google.com" description="My test script" enabled="true" 
basedir="myscript"> 
    <Include>http://www.google.com</Include> 
    <Require filename="jquerymin.js"/> 
</Script> 

ich jquerymin.js saß im gm_scripts/myscript/ Verzeichnis sehen kann.

Ist es außerdem üblich, dass dieser Fehler in der Konsole auftritt, wenn ein Greasemonkey-Skript installiert wird?

Error: not well-formed 
Source File: file:///Users/Greg/Documents/myscript.user.js 
Line: 1, Column: 1 
Source Code: 
    // ==UserScript== 
+0

Ich habe dein Skript versucht, es hat gut funktioniert. Kein Problem hier, mit Greasemonkey Version 0.8.20091129.3. Sind Sie sicher, dass Sie das vorherige Skript vor der Installation des neuen Skripts ordnungsgemäß deinstalliert haben? Ich hatte auch Probleme mit dem Caching in Firefox. – Anders

+0

Dies scheint ein Bug mit jquery 1.4 zu sein, der vor ein paar Tagen veröffentlicht wurde. Zumindest habe ich das gleiche Problem mit jquery 1.4, aber nicht mit jquery 1.3. – ShreevatsaR

Antwort

6

Ok, also habe ich das ein bisschen tiefer betrachtet. Früher habe ich das Skript genau, aber verwendet, um unsere JQuery-Version, so dass es wie folgt aussehen:

// ==UserScript== 
// @name   My Script 
// @namespace  http://www.google.com 
// @description My test script 
// @include  http://www.google.se/* 
// @include  http://www.dn.se/* 
// @require  http://myserver/jquery-1.3.2.js 
// ==/UserScript== 

GM_log("Hello"); 

Das ist für mich ganz gut funktioniert, meine Vermutung, die JQuery oben auf der Google api einige Funktionen fehlen. Weil dieser Code oben gut funktioniert. Beachten Sie auch die /* am Ende jeder URL, bitte schließen Sie das ein.

Versuchen Sie eine andere JQuery und ändern Sie die URLs und es sollte Welt richtig.

+0

Danke, ich habe meine Require URL auf http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js geändert und es funktioniert! –

0

Das @require Attribut funktioniert nicht richtig in Greasemonkey und jQuery ... der gleichen Fehler in FireBug auch auftreten kann.

Eine Alternative besteht darin, jQuery über Greasemonkey in die Seite aufzunehmen, indem das Skript-Tag erstellt wird. Here's how to do that.

+0

Danke, ich habe diesen Link gesehen - ich würde gerne wissen, warum @require eine dokumentierte Methode ist, aber nicht für mich funktioniert. http://www.keyvan.net/2008/10/greasemonkey-jquery/ –

+0

Wir verwenden Greasemonkey mit dem @ require-Attribut für JQuery und es funktioniert gut für uns. – Anders

0

Nicht ganz richtig, es scheint wie jQuery 1.4 versucht, etwas mit einem Anruf zu erkennen, der gerade in der Fettmonkey-Umgebung nicht funktioniert. @require funktioniert normalerweise wie es sollte.

Also die Rückkehr zu 1.3.2 macht den Trick, aber ich würde lieber eine Lösung finden, die mich 1.4 verwenden lässt.

btw, ich benutze diese, etwas anders:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js 
7

fand ich eine nicht ideale Weg, um es mit jQuery verwenden 1.4.1 - das scheint es zu beheben. Es ist die new browser sniffing, die es zu "brechen" scheint.

jquery-1.4.1.min.js:

[old] 36: var o=r.createElement("div");n="on"+n;var m=n in o; 
    [new] 36: var o=r.createElement("div");n="on"+n;var m=true; 

jquery-1.4.1.js

[old] 934: var isSupported = (eventName in el); 
    [new] 934: var isSupported = true; 
6

ich herum und versuchte, sich mit diesem Thema mit GM 0,8 und jquery stolperte zu beschäftigen 1.4.2 und gefunden: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Es sieht für mich wie die endgültige Antwort auf die Frage und wie man es umgehen. Der Workaround hat für mich funktioniert.

+1

Danke, dass du das verlinkt hast, dies ist die definitive Antwort (dhau erwähnte auch das gleiche Update, aber ohne einen Link). Zu der Zeit, als ich diese Frage stellte, war 1.4 gerade erst raus und ich benutzte 1.3.2, für die Anders mein Problem ansprach. –

+0

Danke für den Link, ich habe meine bearbeitet, um den Link nur für den Fall einzuschließen. Hatte zu der Zeit keinen Link und kopierte einige Kommentare aus meinem Skript :) –

2

Patch für jquery-1.4.3.min.js

[alt] Leitung 41 u.createElement ("div"); s = "auf" + s; var B = s in v;
[neu] Zeile 41 u.createElement ("div"); s = "ein" + s; var B = wahr;

3

Gute Nachrichten und Aktualisierung alle Buchungen:

Die oben patch erlaubt vor 1.5.2 jQuery-Versionen, die in Greasemonkey-Skripten ausgeführt werden, aber glücklicherweise wird der Patch nicht mehr benötigt, wenn Sie den curren verwenden t jQuery 1.5.2 Version.

überprüfte ich seinen Code und bemerkte, dass der Funktionscode eventSupported in jQuery

var eventSupported = function(eventName) { ... } 

hat mit der Folge aktualisiert worden, dass ungepatchte jQuery Greasemonkey 0.9.2 1.5.2 läuft jetzt in.

Verwandte Themen