Nachdem K-Meleon mit dem Support-Pack 1 für Version 0.7 die Möglichkeit bietet, Ereignisgesteuerte Makros auszuführen, kann dieser Designfehler des Gecko-Programmcodes behoben werden.
Die nachfolgend beschriebenen Makros werden immer dann abgearbeitet, wenn eine Seite geladen wird (OnLoad-Ereignis). Dabei wird geprüft, ob für die geladene Seite Cookies erlaubt sein sollen. Die Definition hierfür kann in der Datei prefs.js oder user.js vorgenommen werden:
//Für diese Seiten sind Cookies erlaubt, die von der Seite kommen:
user_pref("kmeleon.cookies.1", "http://kmeleon.sourceforge.net/forum");
user_pref("kmeleon.cookies.default", 2);
Mit dieser Definition soll für alle Seiten, die 'http://kmeleon.sourceforge.net/forum' in der Adresse enthalten, das Cookie-verhalten auf 1 (=Cookies für von der Seite erlauben) gesetzt werden. Die zweite Definition steuert, wie die Grundsätzliche Einstellung für Cookies ist.
Realisiert wird das durch folgende Makros:
# Das Makro OnStartup wird ausgeführt, wenn k-Meleon gestartet wird.
OnLoad {$i=1; macros("cookmgr");}
cookmgr {$sites=getpref(STRING, "kmeleon.cookies.".$i)." ";
$cookdef=getpref(INT, "kmeleon.cookies.default");
$cookakt=getpref(INT, "network.cookie.cookieBehavior");
macros("cookmgr_loop"); }
cookmgr_loop {macros($sites == "" ? "cookmgr_prf" : "cookmgr_sub");}
cookmgr_sub {$posi=index($sites," "); $adr=substr($sites, 0 ,$posi);
$sites=substr($sites, $posi+1);
$found=index($URL, $adr);
macros($found != -1 ? "cookmgr_prf" : "cookmgr_loop"); }
cookmgr_prf {$set=$found != -1 ? $i : $cookdef;
macros($cookakt == $set ? "ende" : "cookmgr_set"); }
cookmgr_set {setpref(INT, "network.cookie.cookieBehavior", $set);
$text=" = keine Cookies erlaubt";
$text=$set == 1 ? " = alle Cookies erlaubt" : $text;
$text=$set == 2 ? " = Cookies der Seite erlaubt" : $text;
statusbar("Cookie-Verhalten = ".$set.$text);}