Moinmoin.
Ich hoffe mal, ein paar von euch haben sich schonmal mit Greasemonkey beschäftigt. Falls nicht, auch nicht schlimm Greasemonkey ist ein FF-Addon, das einem ermöglicht eigene JS-Dateien auf jeder Seite ausführen zu lassen. Informationen auf welcher Seite das Script ausgeführt werden soll und so weiter werden im header angegeben.
Beispiel:
Alles anzeigen
Solche Userscript sind auf der Seite userscript.org jederzeit aufrufbar. Da der Nutzer nicht jedes mal das Script de- und den installieren muss, brauche ich einen automatischen updater. Dieser benötigt, dass man um diesen Header scr_meta=<><![CDATA[ ]]></>.toString(); macht.
Das spuckt allerdings in Opera und FF eine Fehlermeldung aus. Scriptly sagt auch, dass eins der < nicht stimmt. Im FF wird jedoch der Code ausgeführt. Hier mal das Auto-Update-Script:
Alles anzeigen
Mir ist nicht ganz klar, wie es möglich ist, eine Javascript-Datei, die auf dem Rechner liegt, dauerhaft zu ändern. Könnte mir das villeicht jemand erklären? Habe mir schon überlegt, ob das was mit top.location.href zu tun hat, aber das würde ja nicht das JS, sondern die Seite beeinflussen. Dann wäre mir auch das ganze drumherum unklar...
Danke schonmal
Edit: Bei TW-Pro kann man per Mausklick das neue Script einfach installieren, Seite neuladen -> Fertig. Geht das hier auch irgendwie?
Ich hoffe mal, ein paar von euch haben sich schonmal mit Greasemonkey beschäftigt. Falls nicht, auch nicht schlimm Greasemonkey ist ein FF-Addon, das einem ermöglicht eigene JS-Dateien auf jeder Seite ausführen zu lassen. Informationen auf welcher Seite das Script ausgeführt werden soll und so weiter werden im header angegeben.
Beispiel:
Quellcode
- // ==UserScript==
- // @name SZS Pro
- // @namespace SZS Pro
- // @description Ändert einige Sachen im SZS
- // @include http://szs.looki.de/*
- // @version 0.5.1
- // @history Built: Skillhelfer-Grundgerüst erstellt. SZS-Pro-Menü rechts eingefügt.all. (0.1.0 alpha) [19.08.2011]
- // @history Built: CP für Skillhelfer werden ausgelesen. Ausrüstungsmenü erstellt. (0.2.0 alpha) [22.08.2011]
- // @history Built: Skillhelfer und Ausrüstungsmenü funktionieren vollständig. (0.3.0 alpha) [23.08.2011]
- // @history Fixed: Es wird nicht mehr "Werkzeug" angezeigt, wenn man nichts in der Hand hat. (0.3.1 alpha) [28.08.2011]
- // @history Built: Warnungstool gestartet und funktionsfähig. (0.4.0 alpha) [22.10.2011]
- // @history Fixed: Skillhelfer setzt nun nur Werte ein, wenn Skillen möglich ist + Hinweiß. (0.4.1 alpha) [22.10.2011]
- // @history Built: Auswahlmöglichkeit, welche Tools man haben will. (0.5.0 alpha) [23.10.2011]
- // @history Add: Warnungstool prüft nun ob WR und JR vorhanden sind und zeigen dies an. (0.5.1 alpha) [23.10.2011]
- // ==/UserScript==
Solche Userscript sind auf der Seite userscript.org jederzeit aufrufbar. Da der Nutzer nicht jedes mal das Script de- und den installieren muss, brauche ich einen automatischen updater. Dieser benötigt, dass man um diesen Header scr_meta=<><![CDATA[ ]]></>.toString(); macht.
Das spuckt allerdings in Opera und FF eine Fehlermeldung aus. Scriptly sagt auch, dass eins der < nicht stimmt. Im FF wird jedoch der Code ausgeführt. Hier mal das Auto-Update-Script:
Quellcode
- CheckScriptForUpdate = {
- id: '116191',
- days: 1,
- name: /\/\/\s*@name\s+(.*)\s*\n/i.exec(scr_meta)[1],
- version: /\/\/\s*@version\s+(.*)\s*\n/i.exec(scr_meta)[1].replace(/\./g, ''),
- time: new Date().getTime(),
- call: function(response) {
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'https://userscripts.org/scripts/source/'+this.id+'.meta.js',
- onload: function(xpr) {AnotherAutoUpdater.compare(xpr,response);}
- });
- },
- compare: function(xpr,response) {
- this.xversion=/\/\/\s*@version\s+(.*)\s*\n/i.exec(xpr.responseText);
- this.xname=/\/\/\s*@name\s+(.*)\s*\n/i.exec(xpr.responseText);
- if ( (this.xversion) && (this.xname[1] == this.name) ) {
- this.xversion = this.xversion[1].replace(/\./g, '');
- this.xname = this.xname[1];
- } else {
- if ( (xpr.responseText.match("the page you requested doesn't exist")) || (this.xname[1] != this.name) )
- GM_setValue('updated_'+this.id, 'off');
- return false;
- }
- if ( (+this.xversion > +this.version) && (confirm('A new version of the '+this.xname+' user script is available. Do you want to update?')) ) {
- GM_setValue('updated_'+this.id, this.time+'');
- top.location.href = 'https://userscripts.org/scripts/source/'+this.id+'.user.js';
- } else if ( (this.xversion) && (+this.xversion > +this.version) ) {
- if(confirm('Do you want to turn off auto updating for this script?')) {
- GM_setValue('updated_'+this.id, 'off');
- GM_registerMenuCommand("Auto Update "+this.name, function(){GM_setValue('updated_'+this.id, new Date().getTime()+''); AnotherAutoUpdater.call(true);});
- alert('Automatic updates can be re-enabled for this script from the User Script Commands submenu.');
- } else {
- GM_setValue('updated_'+this.id, this.time+'');
- }
- } else {
- if(response) alert('No updates available for '+this.name);
- GM_setValue('updated_'+this.id, this.time+'');
- }
- },
- check: function() {
- if (GM_getValue('updated_'+this.id, 0) == 0) GM_setValue('updated_'+this.id, this.time+'');
- if ( (GM_getValue('updated_'+this.id, 0) != 'off') && (+this.time > (+GM_getValue('updated_'+this.id, 0) + (1000*60*60*24*this.days))) ) {
- this.call();
- } else if (GM_getValue('updated_'+this.id, 0) == 'off') {
- GM_registerMenuCommand("Enable "+this.name+" updates", function(){GM_setValue('updated_'+this.id, new Date().getTime()+'');AnotherAutoUpdater.call(true);});
- } else {
- GM_registerMenuCommand("Check "+this.name+" for updates", function(){GM_setValue('updated_'+this.id, new Date().getTime()+'');AnotherAutoUpdater.call(true);});
- }
- }
- };
- if (self.location == top.location && typeof GM_xmlhttpRequest != 'undefined') AnotherAutoUpdater.check();
Mir ist nicht ganz klar, wie es möglich ist, eine Javascript-Datei, die auf dem Rechner liegt, dauerhaft zu ändern. Könnte mir das villeicht jemand erklären? Habe mir schon überlegt, ob das was mit top.location.href zu tun hat, aber das würde ja nicht das JS, sondern die Seite beeinflussen. Dann wäre mir auch das ganze drumherum unklar...
Danke schonmal
Edit: Bei TW-Pro kann man per Mausklick das neue Script einfach installieren, Seite neuladen -> Fertig. Geht das hier auch irgendwie?