HTTP im Firefox mitschneiden
Nachdem ich fast immer "Live HTTP Headers" benutzt hatte, kam ich jetzt mit der FF 3.6 Version in Schwierigkeiten. Die Erweiterung ist nicht kompatibel. Das Problem könnte man zwar auch relativ leicht lösen (einfach die kompatiblen Versionen anpassen in der Erweiterung), aber ich nehm sowas gerne als Anlass mal nach was Neuem zu suchen
Lösung: HttpFox. Gefällt mir. Macht genau das was ich brauch
Scienta ZF Debug Bar
Der Firefox und seine diversen Erweiterungen. Es gibt mit Firebug und FirePHP schon exzellente Tools zur Entwicklung mit PHP und jetzt gibt es noch ein Weiteres:
Scienta ZF Debug Bar
Der aufmerksame Leser hat hier ZF entdeckt und, ja tatsächlich, hier ist die Rede vom Zend Framework.
Die Toolbar erlaubt es einem die SQL-Queries, die Page-Render-Zeit, die Version des ZF und den Speicherverbrauch anzuzeigen. Und noch ein paar Gimmicks mehr, dazu verweise ich aber einfach auf den Original-Blogeintrag.
Quelle: http://jokke.dk/blog/2009/01/introducing_the_scienta_zf_debug_bar
OpenXML als HTML
Sowas find ich klasse. Microsoft stellt ein Firefox-Addon zur Verfügung mit dem man OpenXML-Dokumente als HTML anschauen kann. Sehr praktisch wenn man gerade kein Microsoft Office zur Hand hat, oder auch kein Openoffice. Einfach das Firefox-Addon installieren, die Datei auf den Firefox ziehen und fertig. Klasse.
MochiTest-Lite
Just a reminder to myself, because I want to try that extension:
Mochitest is a unit testing framework created by contributors to Mozilla projects. Mochitest is based on MochiKit , the incredibly useful Javascript library. MochiKit as the basis for writing unit tests has been proven very useful to developing Mozilla applications because of the thick layers of Javscript code in applications like Firefox.
What then, is Mochitest-Lite?
Mochitest, as it is used at Mozilla, requires Python to drive the command line interface, and automate the testing. Python is a very powerful tool for this purpose because, along with automation, it can overwrite and then rewrite configuration files like manifests and preferences, all while having a minimal impact on the application being tested. Mochitest also uses a client-server architecture to serve test documents to the application being tested. On top of that, an application needs to be built with the Mozilla build system to work with Mochitest.This makes sense for large applications like Firefox, but what about a unit testing framework for developers of small XULrunner applications and extensions for existing Mozilla applications? These developers have different requirements. Mochitest-Lite is a way to get the same test writing tools and automation without the overhead of running Mochitest the same way it is used to test Mozilla code.
Javascript aus FF-Erweiterung in der Webseite benutzen
Langer Titel, kurzer Blogeintrag. Ich bastel gerade daran rum, diverse Javascript-Funktionen innerhalb der HTML-Seite zu benutzen. Das kann ziemlich hässlich werden:
var head = this.getContentDocument().getElementsByTagName("head")[0];
var script = this.getContentDocument().createElement("script");
var showImage = this.getContentDocument().createTextNode("function showImage(id) { "
+ "var image = document.getElementById(id);"
+ "image.style.display = \"inline\"; "
+ "image.parentNode.previousSibling.addEventListener(\"mouseout\",
function() {"
+ "window.setTimeout(fadeImage, 1500, id);"
+ "}, false)"
+ "}");
script.appendChild(showImage);
head.appendChild(script);
Alles doppelt escapen und so. Kein Spass. Hässlich zum Lesen. Lösung:
var head = this.getContentDocument().getElementsByTagName("head")[0];
var script = this.getContentDocument().createElement("script");
script.setAttribute("src", "resource://jslibs/foobar.js");
script.setAttribute("type", "text/javascript");
head.appendChild(script);
Nix spektakuläres, aber innerhalb der Datei "foobar.js" kann man jetzt 'ganz normales' Javascript schreiben. Ich freu mich über sowas
Javascript dynamisch laden
Heute habe ich mich hauptsächlich damit beschäftigt, wie man Javascript-Dateien innerhalb von Javascript-Dateien includiert. Mein erster Ansatz war (etwas XUL-spezifisch, aber prinzipiell klappt das auch im HTML-DOM):
var jsFiles = [
"chrome://myEntension/content/lib/domain.js",
"chrome://myExtension/content/lib/helper.js",
"chrome://myExtension/content/lib/js_locale.js",
"chrome://myExtension/content/lib/urlParser.js"
];
var root = document.getElementById("someId")
for (var i = 0; i < jsFiles.length; i++) {
var scriptElement = document.createElement("script");
scriptElement.setAttribute("type", "application/x-javascript");
scriptElement.setAttribute("src", jsFiles[i]);
root.appendChild(scriptElement);
}
Das hat auch eigentlich soweit ganz gut geklappt, im DOM waren alle drin. Nur war irgendwie keine der includierten Funktionen ... verfügbar. So als ob die Knoten in den DOM reingehängt wurden, aber das src-Attribute nicht ausgelesen und .. geparst.
Nunja, nachdem ich damit eine Weile rumgedoktert habe, wurde im im Mozilla-IRC-Channel auf Components.utils.import hingewiesen. Das ist doch genau das was ich brauche. Also sieht das jetzt so aus:
var jsFiles = [
"chrome://myEntension/content/lib/domain.js",
"chrome://myExtension/content/lib/helper.js",
"chrome://myExtension/content/lib/js_locale.js",
"chrome://myExtension/content/lib/urlParser.js"
];
for (var i = 0; i < jsFiles.length; i++) {
Components.utils.import(jsFiles[i]);
}
Wunderhübsch. Klappt nur nicht, weil chrome://-URLs nicht erlaubt sind. Man braucht file:// oder resource://. Also schreibt man ins chrome.manifest:
resource jslibs content/lib/
und schreibt obige chrome://-URL um in:
"resource://jslibs/helper.js"
Wunderprächtig. Jetzt klappts. Fast. In jede Datei die man importiert muss man noch reinschreiben was denn exportiert werden soll. Klingt umständlich, der tiefere Sinn hat sich mir noch verschlossen, aber erstmal egal für die Funktionalität:
var EXPORTED_SYMBOLS = ["LOG"];
function LOG(msg) {
Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
.logStringMessage(new Date().toLocaleString() + ": " + msg);
}
Am obigen EXPORTED_SYMBOLS gibt man an welche Variablen nach außen hin sichtbar sein sollen. Voila, es ist geschafft.
Firefox Addons selbst erstellen
Dieser Artikel ist aus dem Jahr 2008. Inzwischen hat sich jede Menge geändert, insbesondere im Zusammenhang mit Firefox Addons. Nachfolgende Informationen sind veraltet und werden höchstwahrscheinlich nicht mehr funktionieren. Ich empfehle jetzt eher die Lektüre von https://addons.mozilla.org/en-US/developers/builder
Meine Diplomarbeit wird ein Firefox-Addon sein (früher hiessen die noch Extensions), also schreib ich hier gleich mal meine Erfahrungen bezüglich dessen nieder. Wird mir helfen Text für meine Diplomarbeit zu generieren. Zuerst ein paar Links
- http://www.xulplanet.com/, Referenzseite für alles was um XUL geht. Besser und neuer ist aber: http://developer.mozilla.org/En/XUL
- UUID online erzeugen: http://www.famkruithof.net/uuid/uuidgen. Braucht man aber nicht mehr, weil die Ids von FF-Extension inzwischen die E-Mail-Syntax verwenden.
- Extensionwizard der eine minimale Erweiterung erstellt: http://ted.mielczarek.org/code/mozilla/extensionwiz/. Hat bei mir zu keiner funktionsfähigen Erweiterung geführt, aber vielleicht habt ihr mehr Glück
- "Periodic Table", eine Seite mit allem was XUL kann: http://www.hevanet.com/acorbin/xul/top.xul
- Ein riesen Tutorial: http://developer.mozilla.org/en/XUL_Tutorial
- http://www.borngeek.com/firefox/toolbar-tutorial
- http://www.rietta.com/firefox/Tutorial
- http://www.spket.com, ein Eclipse-Plugin zur Entwicklung von FF-Addons
Dann die Erklärung, wie man die Entwicklung "leichter" gestaltet. Alles prima erklärt auf der Seite von Mozilla, aber ich schreibs auch nochmal hin. Zuerst brauchen wir einen Entwickler-Firefox, als besser gesagt, ein Entwickler-Profil. Dazu machen wir Folgendes
- Erstelle eine Batchdatei (z.B. auf deinem Desktop): firefox-dev.bat
- Innerhalb dieser Batchdatei schreibst du:
-
start "" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -no-remote -P dev
-
- Speichern und schliessen.
Dieses Profil füttern wir dann mit ein paar hilfreichen Extensions
- Console²
- Firebug
- DOM Inspector (ist in FF 3.0 nicht mehr automatisch enthalten)
- Extension Developer
Ich benutze zur Zeit die Spket IDE, allerdings ist die schon etwas älter, d.h. die Extensions sind erstmal nur FF 2.0 kompatibel. Das lässt sich zwar mit einer Zeilenänderung ändern, aber ist lästig.
Um dem neuen Profil ("dev") auch die Erweiterung bekannt zu machen, gibt es folgende Möglichkeit:
- Herausfinden an welcher Stelle die chrome.manifest Datei liegt. Bei mir z.B. unter ~/workspace/projektA/chrome.manifest
- In das Profilverzeichnis von "dev" gehen. Dort in den Unterordner extensions
- Im selben Verzeichnis wie die chrome.manifest befindet sich auch die install.rdf. In dieser gibt es den XML-Knoten <em:id>foobar@example.com</em:id>. Diese Id merken wir uns (hier: foobar@example.com).
- Wir erstellen im Profilverzeichnis/extensions eine Datei mit dem Namen foobar@example.com. Innerhalb dieser Datei geben wir den Pfad zur chrome.manifest an (z.B. ~/workspace/projektA/)
Fertig. Ich werde diesen Artikel wohl noch erweitern und verbessern im Laufe des nächsten halben Jahres