User:Dickvl: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
(→‎Private Browsing: code cleanup (1.1))
(→‎Restart Firefox: maxVersion bump 999)
 
(11 intermediate revisions by the same user not shown)
Line 28: Line 28:
===Double Underlined pop-ups ===
===Double Underlined pop-ups ===
You can add this code to ''userContent.css'' to hide some ads and some [http://en.wikipedia.org/wiki/IntelliTXT IntelliTXT] type pop-ups (double underlined links) [http://forums.mozillazine.org/viewtopic.php?f=38&t=564572&p=8538685].
You can add this code to ''userContent.css'' to hide some ads and some [http://en.wikipedia.org/wiki/IntelliTXT IntelliTXT] type pop-ups (double underlined links) [http://forums.mozillazine.org/viewtopic.php?f=38&t=564572&p=8538685].
<pre>
<pre>/* google_ads_frame, yahoo iframe*/
/* google_ads_frame */
IFRAME[src*='googlesyndication'],
iframe[src*="googlesyndication"],
IFRAME[name='google_ads_frame'] {display:none!important}
iframe[name="google_ads_frame"] {display:none!important}
IFRAME[title='Ads by Yahoo!'] {display:none!important}


/* intelliTXT and others */
/* intelliTXT and others */
#iTt,#adbrite_inline_div,#AdvertBanner,#amzn-popup-div,#konaLayers,#lwPreview,#menuModule,#tf_AdDiv,#tooltipBox,#IL_BUBBLE,#IL_FORM_CONT
#iTt,#adbrite_inline_div,#AdvertBanner,#amzn-popup-div,
#konaLayers,#lwPreview,#menuModule,#tf_AdDiv,#tooltipBox,
#IL_BUBBLE,#IL_FORM_CONT,#snap_com_shot_main
  {display:none!important}  
  {display:none!important}  


Line 42: Line 44:


==Error Console==
==Error Console==
===List Add-ons===
The Code examples to run in the ''"Tools -> Error Console"'' have been moved to the [[User:Dickvl/JavaScript_Error_Console]] page.
Sometime ago I noticed the [http://forums.mozillazine.org/viewtopic.php?f=23&t=1172765 Mozilla's Places Stats Project] thread with the possibility to display a list of installed extensions in JSON notation by using the Error Console. That gave me an idea to do the same for the printing passwords code in the [[Password Manager]] article.<br>
 
I have also taken the opportunity to create a similar file for displaying the installed extensions. So here are two versions.<br>
The first version shows the name and version number and the second version has the possibility to select which additional columns you wish to see.<br>
<pre>/*
* Paste this file into Firefox's JavaScript Console and evaluate it to display the installed extensions and themes - dickvl@kb.mozillazine.org
*/
(function () {
var Cc = Components.classes;
var Ci = Components.interfaces;
var EMP = "http://www.mozilla.org/2004/em-rdf#";
var rv = {}; rv.ext = []; rv.the = [];
 
var ds =
    Cc["@mozilla.org/extensions/manager;1"].
    getService(Ci.nsIExtensionManager).
    datasource;
var rdf =
    Cc["@mozilla.org/rdf/rdf-service;1"].
    getService(Ci.nsIRDFService);
var elts =
    Cc["@mozilla.org/rdf/container-utils;1"].
    getService(Ci.nsIRDFContainerUtils).
    MakeSeq(ds, rdf.GetResource("urn:mozilla:item:root")).
    GetElements();
 
function rdfGS(elt,res){
try{
    return(ds.GetTarget(elt,rdf.GetResource(EMP+res),true).QueryInterface(Ci.nsIRDFLiteral).Value);
} catch(e){return("")}
}
 
function makeRV(elt,rv){
var nam = rdfGS(elt,"name");
var ver = rdfGS(elt,"version");
var dis = rdfGS(elt,"isDisabled");
var hom = rdfGS(elt,"homepageURL");
rv.push({name:nam,id:elt.Value.replace(/^urn:mozilla:item:/,""),vers:ver,dis:dis,home:hom});
return(rv);
}
 
function makeLIST(rv){
var list="",i,RV;
for (i=0;RV=rv[i];i++) {
  var name = RV.name;
  var vers = RV.vers;
  var disab = (RV.dis=="true")?"(disabled)":"";
  var home = RV.home;
  list+="<a href=" + home + "><span>" + name + " </span><span> " + vers + " </span></a><span> " + disab + " </span></br>";
}
return(list);
}
 
while (elts.hasMoreElements()) {
var elt = elts.getNext().QueryInterface(Ci.nsIRDFResource);
if (ds.HasAssertion(elt,rdf.GetResource(EMP+"type"),rdf.GetIntLiteral(2),true)){
  makeRV(elt,rv.ext);
}
if (ds.HasAssertion(elt,rdf.GetResource(EMP+"type"),rdf.GetIntLiteral(4),true)){
  makeRV(elt,rv.the);
}
}
 
var extList="<p><b>Extensions:</b><br>"+makeLIST(rv.ext)+"</p>";
var theList="<p><b>Themes:</b><br>"+makeLIST(rv.the)+"</p>";
 
window.open('data:text/html,
<html><head>
<meta http-equiv=content-type" content="text/html; charset=ISO-8859-1">
<title>Mozilla Extensions</title>
</head><body style="margin: 1em 3em; background-color: rgb(255, 221, 221);">
' + extList + theList + '
</body></html>',
"", "menubar=yes,toolbar=no,scrollbars=yes,resizable=yes,width=1000,height=600");
})();
</pre>
<pre>/*
*To display the installed extensions and themes paste this file into Firefox's JavaScript Console and evaluate it - dickvl@kb.mozillazine.org
*/
(function () {
var Cc = Components.classes;
var Ci = Components.interfaces;
var EMP = "http://www.mozilla.org/2004/em-rdf#";
var EMT = 2; /* Extensions: EMT = 2;  Themes: EMT = 4; */
var rv = {}; rv.ext = []; rv.the = [];
 
/* columns - 0:space  1:name  2:version  3,4:disabled  5:id  6:description  7:homepage  8:compatible  9:install location */
var THEAD = ["","Name","Version","Disabled","(-)","ID","Description","Home Page","Comp.","Inst.Loc"];
var TCONT = (prompt("Columns:\n\n1:Name\n2:Version\n3:Disabled  4:(U|A)\n5:ID\n6:Description\n7:Home Page\n","1 2 3"));
TCONT=((TCONT==null || TCONT=="")?"1 2 3":TCONT).split(" ");
 
var ds =
    Cc["@mozilla.org/extensions/manager;1"].
    getService(Ci.nsIExtensionManager).
    datasource;
var rdf =
    Cc["@mozilla.org/rdf/rdf-service;1"].
    getService(Ci.nsIRDFService);
var elts =
    Cc["@mozilla.org/rdf/container-utils;1"].
    getService(Ci.nsIRDFContainerUtils).
    MakeSeq(ds, rdf.GetResource("urn:mozilla:item:root")).
    GetElements();
 
function rdfGS(elt,res){
try{
  return(ds.GetTarget(elt,rdf.GetResource(EMP+res),true).QueryInterface(Ci.nsIRDFLiteral).Value);
}catch(e){return("")}
}
 
function makeTD(rv){
var i,j,DV,RV,TC,td="";
for (i=0;RV=rv[i];i++) {
  td+="<tr>";
for(j=0;TC=TCONT[j];j++){
  switch(parseInt(TC)){
  case 1: DV=RV.name;break;
  case 2: DV=RV.vers;break;
  case 3: DV=(RV.dis=="true")?"(disabled)":"";break;
  case 4: DV=((RV.adis=="true")?"(A)":"")+((RV.udis=="true")?"(U)":"");break;
  case 5: DV=RV.id;break;
  case 6: DV=RV.descr;break;
  case 7: DV=RV.home;break;
  case 8: DV=(RV.comp=="true")?"Yes":((RV.comp=="false")?"No":"");break;
  case 9: DV=RV.inst;break;
  default: DV="";break;
  } td+="<td>"+DV+"</td>";
}
td+="</tr>";
}
return(td);
}
 
function makeRV(elt,rv){
var nam = rdfGS(elt,"name");
var ver = rdfGS(elt,"version");
var des = rdfGS(elt,"description");
var dis = rdfGS(elt,"isDisabled");
var ads = rdfGS(elt,"appDisabled");
var uds = rdfGS(elt,"userDisabled");
var hom = rdfGS(elt,"homepageURL");
var com = rdfGS(elt,"compatible");
var ins = rdfGS(elt,"installLocation");
rv.push({name:nam,id:elt.Value.replace(/^urn:mozilla:item:/,""),vers:ver,descr:des,adis:ads,udis:uds,home:hom,dis:dis,inst:ins,comp:com});
return(rv);
}
 
while (elts.hasMoreElements()){
var elt = elts.getNext().QueryInterface(Ci.nsIRDFResource);
if(isExt=ds.HasAssertion(elt,rdf.GetResource(EMP+"type"),rdf.GetIntLiteral(2),true)){
  makeRV(elt,rv.ext);
}
if(isExt=ds.HasAssertion(elt,rdf.GetResource(EMP+"type"),rdf.GetIntLiteral(4),true)){
  makeRV(elt,rv.the);
}
}
 
var thead="";
for(j=0;TC=TCONT[j];j++){thead+="<td><b>"+(THEAD[(TC<THEAD.length)?TC:0])+"</b></td>";}
 
var tdivE = makeTD(rv.ext);
var tdivT = makeTD(rv.the);
 
function TD(string) {return (string.length < 2) ? "0" + string : string ;}
function FD(number){return (number < 1000) ? number + 2000 : number;}
 
var now = new Date();
var hrs = TD(now.getHours() + "");
var min = TD(now.getMinutes() + "");
var sec = TD(now.getSeconds() + "");
 
var timeValue = " | At  " + hrs + ":" + min + ":" + sec;
var days = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var date = ((now.getDate()<10) ? "0" : "")+ now.getDate();
 
var today =  "On " + days[now.getDay()] + ", " + date + " " + months[now.getMonth()] + " " +    (FD(now.getYear())) + timeValue;
 
function makeTABLE(label,thead,tcont){
return('<p><b>'+label+':</b><br>
<table style="empty-cells: show; background-color: rgb(221, 255, 221);" border="1" cellspacing="0">
<tbody><tr style="background-color: rgb(204, 204, 255);">'+thead+'</tr>'+
tcont+'</tbody></table></p>');
}
 
window.open('data:text/html,
<html><head>
<meta http-equiv=content-type" content="text/html; charset=ISO-8859-1">
<title>Mozilla Extensions & Themes</title>
<style type="text/css">
td {
  font-family: "Trebuchet MS", Arial, Verdana, Sans-Serif;
  font-size: 85%;
  padding: 1px 2px 1px 2px;
}
</style>
</head><body style="margin: 1em 3em; background-color: rgb(255, 221, 221);">
<b>MOZILLA ADD-ONS INFORMATION (by dickvl@kb.mozillazine.org)</b><p>'+today+'</p>'+
makeTABLE("Extensions",thead,tdivE) + makeTABLE("Themes",thead,tdivT)+'
</body></html>',"", "menubar=yes,toolbar=no,resizable=yes,scrollbars=yes,width=1000,height=700");
})();
</pre>
 
===Printing Passwords===
Here is an enhanced version of the Password printing code from [[Password Manager]] to show all the fields, may be helpful for troubleshooting issues.
<pre>/*
* Paste this file into Firefox's JavaScript Console and evaluate it to display the saved names and passwords - dickvl@kb.mozillazine.org
*/
 
(function(){
function tdigs(str) {return (str.length < 2) ? "0" + str : str;}
function fdigs(num){return (num < 1000) ? num + 2000 : num;}
 
var now = new Date();
var hrs = tdigs(now.getHours() + "") ;
var mins = tdigs(now.getMinutes() + "") ;
var secs = tdigs(now.getSeconds() + "") ;
 
var tValue = " | At  " + hrs + ":" + mins + ":" + secs;
var days = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var mons = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var date = ((now.getDate()<10) ? "0" : "")+ now.getDate();
 
var today =  "On " + days[now.getDay()] + ", " + date + " " + mons[now.getMonth()] + " " +    (fdigs(now.getYear())) + tValue ;
 
var Cc = Components.classes;
var Ci = Components.interfaces;
 
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
 
var tokendb = Cc["@mozilla.org/security/pk11tokendb;1"]
                .createInstance(Ci.nsIPK11TokenDB);
var token = tokendb.getInternalKeyToken();
 
try {token.login(true);} catch (e) {}
 
if (token.isLoggedIn()) {
var passwordmanager = Cc["@mozilla.org/login-manager;1"]
                      .getService(Ci.nsILoginManager);
var names="",signons = passwordmanager.getAllLogins({});
 
for (i=0;i<signons.length;i++) {
  try {
  var host = signons[i].hostname;
  var realm = signons[i].httpRealm;
  var user = signons[i].username;
  var usrf = signons[i].usernameField;
  var psw = signons[i].password;
  var pswf = signons[i].passwordField;
  var surl = signons[i].formSubmitURL;
  if (user == ""){ user = "<br>"; }
  names+="<tr>\n<td>"+host+"</td>\n<td>"+realm+" </td>\n<td>"+usrf+"</td>\n<td>"+user+"</td>\n<td>"+pswf+"</td>\n<td>"+psw+"</td>\n<td>"+surl+"</td>\n</tr>\n";
  } catch(e) {}
}
 
void(window.open('data:text/html,
<html><head>
<meta http-equiv=content-type" content="text/html; charset=ISO-8859-1">
 
<title>Exported Mozilla Passwords</title>
<style type="text/css">
td {
  font-family: "Trebuchet MS", Arial, Helvetica, Geneva, Verdana, Sans-Serif;
  font-size: 85%;
  padding: 1px 2px 1px 2px;
}
</style>
</head><body style="margin: 1em 3em; background-color: rgb(255, 221, 221);">
<b>MOZILLA PASSWORD INFORMATION</b>
<p>Produced by <i>Pasting Code in the "Tools > Error Console: Code field"</i> (by "ernie" - Andrew Poth - Ed Mullen - adapted by dickvl@kb.mozillazine.org to run in the Error Console)<br>'+today+
'</p><p>
<table style="empty-cells: show; background-color: rgb(221, 255, 221);" border="1" cellspacing="0">
<tbody><tr style="background-color: rgb(204, 204, 255);">
<td>
<b>Host</b>
</td>
<td>
<b>Realm</b>
</td>
<td>
<b>User Field</b>
</td>
<td>
<b>User Name</b>
</td>
<td>
<b>Psw Field</b>
</td>
<td>
<b>Password</b>
</td>
<td>
<b>Submit URL</b>
</td>
</tr>'+names+'</tbody></table>
</p></body></html>',"","menubar=yes,resizable=yes,scrollbars=yes,width=1000,height:600"));
}
})();
</pre>


==Extensions==
==Extensions==
===Private Browsing===
===Private Browsing===
Here is a simple extension to disable the "Tools ->  Start Private Browsing" menu entry and the "Tools > Clear Recent History" menu entry in Firefox 3.5/6.<br>
''Private Browsing disable'' (pbdisable) is a simple extension to disable the "Tools ->  Start Private Browsing" menu entry and the "Tools > Clear Recent History" menu entry in Firefox 3.5/6.<br>
The extension hides these menu entries and also disables their shortcut keys. The code doesn't hide "[[Menu_differences|Tools -> Options]] -> Privacy" to start PB mode automatically and you need to add code to userChrome.css to do that. The code in userChrome.css also hides the menu entries if the extension is disabled or not installed. Current Firefox versions still process code in userChrome.css if started in [[Safe_mode]]. You can lock the pref ''browser.privatebrowsing.autostart'' to prevent auto start in PB mode (see below). It is still possible to clear the cache via "[[Menu_differences|Tools -> Options]] -> Advanced -> Network" and to clear history in the Library and History sidebar. See also [https://wiki.mozilla.org/Firefox3.1/PrivateBrowsing/SecurityReview]
The extension hides these menu entries and also disables their shortcut keys and should prevent Firefox from entering Private Browsing mode. The code doesn't hide "[[Menu_differences|Tools -> Options]] -> Privacy" to start PB mode automatically and you need to add code to userChrome.css to do that. The code in userChrome.css also hides the menu entries if the extension is disabled or not installed. Current Firefox versions still process code in userChrome.css if started in [[Safe_mode]]. It is possible to clear the cache via "[[Menu_differences|Tools -> Options]] -> Advanced -> Network" and to clear history in the Library and History sidebar. See also [https://wiki.mozilla.org/Firefox3.1/PrivateBrowsing/SecurityReview]
 
Add this code to [[userChrome.css]] below the @namespace line (only add the @namespace line if it is missing).<br>
See http://kb.mozillazine.org/Editing_configuration#How_to_edit_configuration_files
<pre>@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 
/* Hide PB and Sanitize item in Tools menu */
#sanitizeSeparator, #privateBrowsingItem, #sanitizeItem {display:none!important;}
 
/* Hide AutoStart PB and some History settings in Options > Privacy */
#rememberHistoryDays,#historyDays,#rememberAfter,
#privateBrowsingAutoStart, #clearDataBox {display:none!important;}
</pre>


You can lock some prefs with this version of the file mozilla.cfg.<br>
For more information about the Private Browsing disable extension please visit: [[User:Dickvl/Private_Browsing_disable]]
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''mozilla.cfg''' (last updated Feb 22, 2010) and copy the file to the Firefox program folder.
<pre>data:application/octet-stream;base64,
PDwaF3l8cHhdf3JzNS9vf3yEgHJ/O31/doNugXJvf3yEgHZ7dDtugoF8gIFuf4EvOS1zbnmAcjZI
Ghd5fHB4XX9yczUvb398hIByfzt9f3aDboFyb398hIB2e3Q7cXx7gWx9f3x6fYFsfHtscnuBcn8v
OS2Bf4JyNkgaF3l8cHhdf3JzNS9vf3yEgHJ/O3V2gIF8f4ZscoV9dn9ybHFuhoAvOS0+RT02SBoX
eXxweF1/cnM1L29/fISAcn87dXaAgXx/hmxyhX12f3JscW6GgGx6dnsvLTlGPTZIGhd5fHB4XX9y
czUvfXlucHKAO3V2gIF8f4Y7cntub3lycS85LYF/gnI2SBoXeXxweF1/cnM1L31/doNucIY7cHly
bn9ce2B1goFxfIR7O3V2gIF8f4YvOS1zbnmAcjZIGhd5fHB4XX9yczUvfX92g25whjtwfXE7dXaA
gXx/hi85LXNueYByNkgaF3l8cHhdf3JzNS99f3aDbnCGO4Bue3aBdodyO4Bue3aBdodyXHtgdYKB
cXyEey85LXNueYByNkgaFw==
</pre>
You also need to create the file '''local-settings.js''' with this line:<br>
pref("general.config.filename", "mozilla.cfg");
Copy that file to the '''grefprefs''' folder or the '''defaults\pref''' folder in the Firefox program folder.
For full instructions, see [[Locking_preferences]]
 
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''pbdisable.xpi''' (last updated Feb 23, 2010)<br>
You can install the extension via "File > Open File" or by dragging the file in a Firefox window.<br>
You can move the extensions folder (pbdisable@mozillazine.org) from the extensions folder in the [[Profile_folder_-_Firefox|Profile Folder]] to the ''%AppData%\Mozilla\extensions\{ec8030f7-c20a-464f-9b0e-13a3a9e97384}'' folder or to the '''extensions''' folder in the Firefox program folder to make the extension work in all Firefox profiles. If you do that then you can't uninstall, but you can disable the extension. You can also drop the XPI file in that folder and the extension will be installed on the next start of Firefox [https://developer.mozilla.org/en/Installing_extensions].<br><!-- http://ehsanakhgari.org/blog/2008-11-08/prepare-your-add-private-browsing -->
<pre>data:application/octet-stream;base64,
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
</pre>


===Keysdisable===
===Keysdisable===
Line 437: Line 66:
You can modify the file ''keysdisable.xul'' in the ''keysdisable.jar''  (zip) archive in the ''keysdisable.xpi'' (zip) archive to make the changes.
You can modify the file ''keysdisable.xul'' in the ''keysdisable.jar''  (zip) archive in the ''keysdisable.xpi'' (zip) archive to make the changes.


Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''keysdisable.xpi'''<br />
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''keysdisable.xpi'''. Updated maxVersion to 6.* (Apr 13, 2011)<br />
<pre>data:application/octet-stream;base64,
<pre>data:application/octet-stream;base64,
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
BgAGANkBAAB4BQAAAAA=
</pre>
</pre>


===Restart Firefox===
===Restart Firefox===
This extension adds a ''Restart Firefox'' item to the ''File'' menu. It displays that menu entry in the language of the installed locale (should work for all locales). All open tabs and windows should be restored if session restore is working properly.<br />
This extension adds a ''Restart Firefox'' item to the File menu and the App menu. It displays that menu entry in the language of the installed locale (&addon.restartNow.label), so should work with all locales. All open tabs and windows should be restored if session restore is working properly.<br />
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''restarter-1.0-fx.xpi'''
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as '''restarter-1.2-fx.xpi''' (updated Jul 2, 2013) - works with Firefox 3.0 and later)
<pre>data:application/octet-stream;base64,
<pre>data:application/octet-stream;base64,
UEsDBAoAAAAAAMl4OzUAAAAAAAAAAAAAAAAHABUAY2hyb21lL1VUCQADWoUaRVqFGkVVeAQAPjP/
UEsDBAoAAAAAAMl4OzUAAAAAAAAAAAAAAAAHABUAY2hyb21lL1VUCQADWoUaRVqFGkVVeAQAPjP/
/1BLAwQKAAAAAADJeDs1AAAAAAAAAAAAAAAADwAVAGNocm9tZS9jb250ZW50L1VUCQADWoUaRVqF
/1BLAwQKAAAAAADJeDs1AAAAAAAAAAAAAAAADwAVAGNocm9tZS9jb250ZW50L1VUCQADWoUaRVqF
GkVVeAQAPjP//1BLAwQUAAAACABZRD48ZbXNK8ECAADJBQAAHAAVAGNocm9tZS9jb250ZW50L3Jl
GkVVeAQAPjP//1BLAwQUAAAACAD8COw8ZbXNK8ECAADJBQAAHAAVAGNocm9tZS9jb250ZW50L3Jl
c3RhcnRlci54dWxVVAkAAxrhY0sa4WNLVXgEAOgDZACNVN9P2zAQfkfifzgsMVFpdQbbw6AtjAGT
c3RhcnRlci54dWxVVAkAA8xOOkzMTjpMVXgEAOgDZACNVN9P2zAQfkfifzgsMVFpdQbbw6AtjAGT
+jBgtC8IVZObXKnBsT3boXQ//vedk7RNGWzLS5K783fffXe+7tFjruABnZdG99guf8OODjc3ulun
+jBgtC8IVZObXKnBsT3boXQ//vedk7RNGWzLS5K783fffXe+7tFjruABnZdG99guf8OODjc3ulun
FyfD68szMORTYg43mxsA3a2z82F/eA3bMHZCZ6fDUxhcD4Znn4GlU2dyPEiS0iP1baJMKhRW/zwL
FyfD68szMORTYg43mxsA3a2z82F/eA3bMHZCZ6fDUxhcD4Znn4GlU2dyPEiS0iP1baJMKhRW/zwL
Line 493: Line 124:
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
c3RQSwUGAAAAAAUABQBmAQAAvAUAAAAA
Z1bCibtUSpRn7nCWC09pkhsR8A7R0meYoEMuPTdazfhDoVjU3adO2gBhZrHHApWQ3Ip7UVnLgI2r
o+PD4SG1I0kgNVZiBmPSC4Ix6k4GfitckhpNtYeFgE8rd+tha+fN253W+tq40GkgI9SKHFq71YJv
sULC8gG0PyXbIPoK2zsyuTWaMnguKZMbixQ9X4npRLEBiOSZCXI8A6EUTKXOzNRDmIgAQgORUzIV
ZeYvhQwwER5GiJHHl4KoYMYjyr1wYDz0oJE4VcJ79FfsXVNqM/LoqMPt+JIpdrbZdaNPzYffYBhU
UVvPFnRe49WBrc6cTip0iupTJP0XtHxhrXHBt/sX76lPv2G1YJc6pGE5JfFjpucZDmroCrkiaMhT
qj6n77eWfF8Ci1q3G+K3F3Iz8tYzwFrLHg7oQoYJXWoQI0pGM0fjW7XMOkNMfNknOYZGIp6JIFpV
nQ5D4XQN+Ee56llOiGLb1/NEkjU7tjJsrVUxeSS2GsHxoqoKvsMjx2EImNsQGceKfxDW9fV+N6ku
Xdws3Rx1YY0tbLk14t/nD1JhP5pYtdSiURIQKDFC2hwvRJYZzWstz8yUl44Oay6e9phQ4kmyaupU
GOHYOGykiKxOCZaB0anJc1pwi9PlJe2wpKSYLDgu+Swpk5DR0HcyF27WFxr/i3YN95h1bW5H+f+N
MC22pF7M+z8BUEsBAhcDCgAAAAAAyXg7NQAAAAAAAAAAAAAAAAcADQAAAAAAAAAQAMBBAAAAAGNo
cm9tZS9VVAUAA1qFGkVVeAAAUEsBAhcDCgAAAAAAyXg7NQAAAAAAAAAAAAAAAA8ADQAAAAAAAAAQ
AMBBOgAAAGNocm9tZS9jb250ZW50L1VUBQADWoUaRVV4AABQSwECFwMUAAAACAD8COw8ZbXNK8EC
AADJBQAAHAANAAAAAAABAAAA7YF8AAAAY2hyb21lL2NvbnRlbnQvcmVzdGFydGVyLnh1bFVUBQAD
zE46TFV4AABQSwECHgMUAAAACADWg+JCqVp8fXwBAADvAgAACwAYAAAAAAABAAAA7YGMAwAAaW5z
dGFsbC5yZGZVVAUAAxPk0lF1eAsAAQTpAwAABGQAAABQSwECFwMUAAAACABkt+08rY2KmVsAAADu
AAAADwANAAAAAAABAAAA7YFNBQAAY2hyb21lLm1hbmlmZXN0VVQFAAOb0zxMVXgAAFBLAQIeAxQA
AAAIAOmwjj4MHivy6QIAAJMGAAAdABgAAAAAAAEAAADtgeoFAABjaHJvbWUvY29udGVudC9yZXN0
YXJ0ZXIyLnh1bFVUBQAD9lOnTXV4CwABBOkDAAAEZAAAAFBLBQYAAAAABgAGAOEBAAAqCQAAAAA=
</pre>
</pre>


Line 516: Line 164:


For more information about the TabVisited extension please visit: [[User:Dickvl/TabVisited]]
For more information about the TabVisited extension please visit: [[User:Dickvl/TabVisited]]
In Firefox 9+  versions you will have an ''unread'' attribute that you can use to style tabs that haven't been visited during the current session.<br />
See: [https://developer.mozilla.org/en/XUL/tab#a-unread tab - MDN]
Quote:
''This attribute is set to true if the tab is unread; that is, either it has not yet been selected during the current session, or has changed since the last time it was selected.''<br />
''This attribute is not present if the tab is not unread.''
<pre>.tabbrowser-tab[unread="true"] .tab-text {}
.tabbrowser-tab:not([unread="true"]) .tab-text {}
.tabbrowser-tab[selected="true"] .tab-text {}
/* not busy: background image */
.tabbrowser-tab:not([busy])[unread="true"] {background-image:-moz-linear-gradient(rgba(153,221,6,0.8) 1px,rgba(153,221,6,0.7) 3px,rgba(153,221,6,0.5) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab:not([busy]):not([unread]) {background-image:-moz-linear-gradient(rgba(255,204,204,0.8) 1px,rgba(255,204,204,0.7) 3px,rgba(255,204,204,0.5) 32%), -moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab:not([busy])[selected="true"] {background-image:-moz-linear-gradient(rgba(255,255,9,0.8) 1px,rgba(255,255,9,0.6) 3px,rgba(255,255,9,0.4) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
/* busy */
.tabbrowser-tab[busy] {background-image:-moz-linear-gradient(rgba(0,6,204,0.8) 1px, rgba(0,6,204,0.7) 3px, rgba(0,6,204,0.7) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab[busy] .tab-text {color:rgb(255,255,0)!important}
.tabbrowser-tab[busy][selected="true"] {background-image:-moz-linear-gradient(rgba(0,204,255,0.8) 1px,rgba(0,204,255,0.7) 3px,rgba(0,204,255,0.6) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab[busy][selected="true"] .tab-text {color:rgb(0,0,255)!important}</pre>
See also:
* [https://developer.mozilla.org/en/Firefox/Updating_add-ons_for_Firefox_9#Theme_changes Updating add-ons for Firefox 9 - MDN: Theme_changes]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=487242 bug 487242#c34] - Regression: in userChrome.css no longer possible to distinguish between unvisited tabs, visited tabs, and the selected tab

Latest revision as of 14:38, 2 July 2013

Bookmarklets

Bookmarklets can be found here: User:Dickvl/Bookmarklets
See also Wikipedia: Bookmarklet

Navigator Object

Here is a bookmarklet to display the content of the Navigator object (plugins, mimeTypes)

javascript:/* dickvl@kb.mozillazine.org */
(function(){
var b='<br>',i,L,O,p,pN,pT=('Navigator properties:').bold()+b+b,oT=('Navigator objects:').bold()+b+b,fT=('Navigator functions:').bold()+b+b;
for(pN in navigator){
if(typeof navigator[pN]=='object'){
O=navigator[pN];L=(O.length)?O.length:0;oT+=(pN+': ').bold()+L.toString().bold()+b;
for(i=0;i<L;i++){M=O[i];oT+=('['+(i+1)+'] ').bold();
for(p in M){if(typeof M[p]!='function'&&typeof M[p]!='object'&&p!='length'){oT+=(p+': ').bold()+M[p]+(' | ').bold()}}
if(M.enabledPlugin){oT+=('Plugin: ').bold()+M.enabledPlugin.name}
oT+=b}
oT+=b}
else if(typeof navigator[pN]!='function'){pT+=(pN+': ').bold()+navigator[pN]+b}
else if(typeof navigator[pN]=='function'){if(/Enabled/.test(pN)){fT+=(pN+': ').bold()+navigator[pN]()+b}}}
with(document.open()){write(pT+b+oT+b+fT);close();}
})();

Code

Code for userChrome.css and userContent.css can be found here User:Dickvl/Code

Double Underlined pop-ups

You can add this code to userContent.css to hide some ads and some IntelliTXT type pop-ups (double underlined links) [1].

/* google_ads_frame, yahoo iframe*/
IFRAME[src*='googlesyndication'],
IFRAME[name='google_ads_frame'] {display:none!important}
IFRAME[title='Ads by Yahoo!'] {display:none!important}

/* intelliTXT and others */
#iTt,#adbrite_inline_div,#AdvertBanner,#amzn-popup-div,
#konaLayers,#lwPreview,#menuModule,#tf_AdDiv,#tooltipBox,
#IL_BUBBLE,#IL_FORM_CONT,#snap_com_shot_main
 {display:none!important} 

/* get.lingospot.com */
.lingo_info_box *,.lingo_spot *,.lingo_reset *{display:none!important}

Error Console

The Code examples to run in the "Tools -> Error Console" have been moved to the User:Dickvl/JavaScript_Error_Console page.

Extensions

Private Browsing

Private Browsing disable (pbdisable) is a simple extension to disable the "Tools -> Start Private Browsing" menu entry and the "Tools > Clear Recent History" menu entry in Firefox 3.5/6.
The extension hides these menu entries and also disables their shortcut keys and should prevent Firefox from entering Private Browsing mode. The code doesn't hide "Tools -> Options -> Privacy" to start PB mode automatically and you need to add code to userChrome.css to do that. The code in userChrome.css also hides the menu entries if the extension is disabled or not installed. Current Firefox versions still process code in userChrome.css if started in Safe_mode. It is possible to clear the cache via "Tools -> Options -> Advanced -> Network" and to clear history in the Library and History sidebar. See also [2]

For more information about the Private Browsing disable extension please visit: User:Dickvl/Private_Browsing_disable

Keysdisable

I use this code on Linux to disable some shortcuts that I want to use in Prefbar or that are otherwise dangerous (Ctr+Q to Quit Firefox is too close to Ctrl+W).

if(E=window.document.getElementById('key_closeWindow')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}
if(E=window.document.getElementById('key_quitApplication')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}
if(E=window.document.getElementById('key_privatebrowsing')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}
if(E=window.document.getElementById('key_openDownloads')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}
if(E=window.document.getElementById('key_undoCloseWindow')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}
if(E=window.document.getElementById('manBookmarkKb')){E.removeAttribute('key');E.removeAttribute('modifiers');E.removeAttribute('command');}

You can use the DOM Inspector to find the ID of a menu entry if you want to disable other menu entries.
You can modify the file keysdisable.xul in the keysdisable.jar (zip) archive in the keysdisable.xpi (zip) archive to make the changes.

Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as keysdisable.xpi. Updated maxVersion to 6.* (Apr 13, 2011)

data:application/octet-stream;base64,
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
BgAGANkBAAB4BQAAAAA=

Restart Firefox

This extension adds a Restart Firefox item to the File menu and the App menu. It displays that menu entry in the language of the installed locale (&addon.restartNow.label), so should work with all locales. All open tabs and windows should be restored if session restore is working properly.
Copy and paste the full DATA code in the location bar and press the Enter key. Save the file as restarter-1.2-fx.xpi (updated Jul 2, 2013) - works with Firefox 3.0 and later)

data:application/octet-stream;base64,
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

TabVisited

In Firefox 3.6 and above it is no longer possible to use the selected attribute to style unvisited and visited tabs with code in userChrome.css. In Firefox 3.6 and above only the selected tab gets a selected="true" attribute. In previous Firefox 3 and 3.5 versions the visited tabs get a selected="false" attribute, but that attribute was removed to fix buggy behavior [3], [4].

For more information about the TabVisited extension please visit: User:Dickvl/TabVisited

In Firefox 9+ versions you will have an unread attribute that you can use to style tabs that haven't been visited during the current session.
See: tab - MDN

Quote: This attribute is set to true if the tab is unread; that is, either it has not yet been selected during the current session, or has changed since the last time it was selected.
This attribute is not present if the tab is not unread.

.tabbrowser-tab[unread="true"] .tab-text {}
.tabbrowser-tab:not([unread="true"]) .tab-text {}
.tabbrowser-tab[selected="true"] .tab-text {}

/* not busy: background image */
.tabbrowser-tab:not([busy])[unread="true"] {background-image:-moz-linear-gradient(rgba(153,221,6,0.8) 1px,rgba(153,221,6,0.7) 3px,rgba(153,221,6,0.5) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}

.tabbrowser-tab:not([busy]):not([unread]) {background-image:-moz-linear-gradient(rgba(255,204,204,0.8) 1px,rgba(255,204,204,0.7) 3px,rgba(255,204,204,0.5) 32%), -moz-linear-gradient(-moz-dialog,-moz-dialog)!important}

.tabbrowser-tab:not([busy])[selected="true"] {background-image:-moz-linear-gradient(rgba(255,255,9,0.8) 1px,rgba(255,255,9,0.6) 3px,rgba(255,255,9,0.4) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}

/* busy */
.tabbrowser-tab[busy] {background-image:-moz-linear-gradient(rgba(0,6,204,0.8) 1px, rgba(0,6,204,0.7) 3px, rgba(0,6,204,0.7) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab[busy] .tab-text {color:rgb(255,255,0)!important}

.tabbrowser-tab[busy][selected="true"] {background-image:-moz-linear-gradient(rgba(0,204,255,0.8) 1px,rgba(0,204,255,0.7) 3px,rgba(0,204,255,0.6) 32%),-moz-linear-gradient(-moz-dialog,-moz-dialog)!important}
.tabbrowser-tab[busy][selected="true"] .tab-text {color:rgb(0,0,255)!important}

See also: