So sieht meine Datei aus.
Code
		
					
				// utilities.js
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the userChromeJS utilities.
 *
 * The Initial Developer of the Original Code is
 * alta88 <alta88@gmail.com>
 *
 * Portions created by the Initial Developer are Copyright (C) 2014
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 * aborix <www.camp-firefox.de/forum>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */
/* ........ Utility functions ............................................... */
var userChrome = {
  path: null,
  dirToken: null,
  ignoreCache: false,
  get loadOverlayDelay () {
    if (!this._loadOverlayDelay)
      this._loadOverlayDelay = 500;
    return this._loadOverlayDelay;
  },
  set loadOverlayDelay(delay) {
    this._loadOverlayDelay = delay;
  },
  get loadOverlayDelayIncr() {
    if (!this._loadOverlayDelayIncr)
      this._loadOverlayDelayIncr = 1600;
    return this._loadOverlayDelayIncr;
  },
  set loadOverlayDelayIncr(delay) {
    this._loadOverlayDelayIncr = delay;
  },
  import: function(aPath, aRelDirToken) {
    let file;
    this.path = aPath;
    this.dirToken = aRelDirToken;
    if (aRelDirToken) {
      // Relative file
      let absDir = this.getAbsoluteFile(aRelDirToken);
      if (!absDir)
        return;
      let pathSep = absDir.path.match(/[\/\\]/)[0];
      file = absDir.path + (aPath == "*" ?
          "" : pathSep + aPath.replace(/[\/\\]/g, pathSep));
    }
    else
      // Absolute file
      file = aPath;
    file = this.getFile(file);
    if (!file)
      return;
    if (file.isFile()) {
      if (/\.js$/i.test(file.leafName))
        this.loadScript(file, aRelDirToken, null);
      else if (/\.xul$/i.test(file.leafName)) {
        let xul_files = [];
        xul_files.push(file);
        this.loadOverlay(xul_files, this.dirToken, null, this.loadOverlayDelay);
//      this.loadOverlayDelay = this.loadOverlayDelay + this.loadOverlayDelayIncr;
      }
      else
        this.log("File '" + this.path +
                 "' does not have a valid .js or .xul extension.", "userChrome.import");
    }
    else if (file.isDirectory())
      this.importFolder(file);
    else
      this.log("File '" + this.path +
               "' is neither a file nor a directory.", "userChrome.import");
  },
  loadScript: function(aFile, aFolder, aRelDirToken) {
    setTimeout(function() {
      Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
                .getService(Components.interfaces.mozIJSSubScriptLoader)
                .loadSubScriptWithOptions(userChrome.getURLSpecFromActualFile(aFile),
                                          {target: window,
                                           charset: userChrome.charSet,
                                           ignoreCache: userChrome.ignoreCache});
      // log it
      userChrome.log(aRelDirToken ? ("[" + aRelDirToken + "]/" +
          (aFolder && aFolder != "*" ? aFolder + "/" : "") + aFile.leafName) :
          aFile.path, "userChrome.loadScript");
    }, 0);
  },
  // XXX: Due to bug 330458, an overlay must finish before another can be
  // called, otherwise neither are successful.  Implementing an observer to
  // serialize is better left as a fix in the core bug.  Here, settimout values
  // are set to minimize but there is no quarantee; overlay cdata (if any)
  // needs to consider overlay completions and logging does not strictly mean
  // an overlay has completed, rather that the overlay file has been invoked.
  loadOverlay: function(aFiles, aRelDirToken, aFolder, aDelay) {
//userChrome.log(aDelay+" multiple import delay", userChrome.loadOverlay);
    // Increment multiple import delay
    this.loadOverlayDelay = this.loadOverlayDelay + this.loadOverlayDelayIncr;
    setTimeout(function() {
      if (aFiles.length > 0) {
//userChrome.log(userChrome.loadOverlayDelay+" inter folder delay", userChrome.loadOverlay);
        // log it
        userChrome.log(aRelDirToken ? ("[" + aRelDirToken + "]/" +
            (aFolder && aFolder != "*" ? aFolder + "/" : "") + aFiles[0].leafName) :
            aFiles[0].path, "userChrome.loadOverlay");
        document.loadOverlay(userChrome.getURLSpecFromActualFile(aFiles.shift()), null);
        setTimeout(arguments.callee, userChrome.loadOverlayDelay);
      }
    }, aDelay);
  },
  // Include all files ending in .js and .xul from passed folder
  importFolder: function(aFolder) {
    let files = aFolder.directoryEntries
                       .QueryInterface(Components.interfaces.nsISimpleEnumerator);
    let xul_files = [];
    while (files.hasMoreElements()) {
      let file = files.getNext().QueryInterface(Components.interfaces.nsIFile);
      if (/\.js$/i.test(file.leafName) && file.leafName != "userChrome.js")
        this.loadScript(file, this.path, this.dirToken);
      else if (/\.xul$/i.test(file.leafName)) {
        xul_files.push(file);
      }
    }
    if (xul_files.length > 0)
      this.loadOverlay(xul_files, this.dirToken, this.path);
  },
  getFile: function(aPath, aRelDirToken) {
    try {
      let file = Components.classes["@mozilla.org/file/local;1"]
                           .createInstance(Components.interfaces.nsIFile);
      file.initWithPath(aPath);
      // Bad file doesn't throw on initWithPath, need to test
      if (file.exists())
        return file;
      this.log("Invalid file '" + this.path + (this.dirToken ?
          ("' or file not found in directory with token '" + this.dirToken) :
          "") + "' or other access error.", "userChrome.getFile");
    }
    catch (e) {
      // Bad folder throws on initWithPath
      this.log("Invalid folder '" + this.path + (this.dirToken ?
          ("' or folder not found in directory with token '" + this.dirToken) :
          "") + "' or other access error.", "userChrome.getFile");
    }
    return null;
  },
  getAbsoluteFile: function(aRelDirToken) {
    try {
      let absDir = Components.classes["@mozilla.org/file/directory_service;1"]
                             .getService(Components.interfaces.nsIProperties)
                             .get(aRelDirToken, Components.interfaces.nsIFile);
      return absDir;
    }
    catch (e) {
      this.log("Invalid directory name token '" + this.dirToken +
               "' or directory cannot be accessed.", "userChrome.getAbsoluteFile");
      return null;
    }
  },
  getURLSpecFromActualFile: Components.classes["@mozilla.org/network/io-service;1"]
                                .getService(Components.interfaces.nsIIOService)
                                .getProtocolHandler("file")
                                .QueryInterface(Components.interfaces.nsIFileProtocolHandler)
                                .getURLSpecFromActualFile,
  /* Console logger */
  log: function(aMsg, aCaller) {
    Components.classes["@mozilla.org/consoleservice;1"]
              .getService(Components.interfaces.nsIConsoleService)
              .logStringMessage(this.date + " userChromeJS " +
                                (aCaller ? aCaller +": " : "") + aMsg);
  },
  get dateFormat() {
    if (!this._dateFormat)
      this._dateFormat = "%Y-%m-%d %H:%M:%S";
    return this._dateFormat;
  },
  set dateFormat(format) {
    this._dateFormat = format;
  },
  get date() {
    let date = new Date();
//  return date.toLocaleFormat(this.dateFormat);
    try {
      date = date.toLocaleFormat(this.dateFormat);
    } catch(e) {
      date = date.toString();
    };    
    return date;
  },
  set charSet(val) {
    this._charSet = val;
  },
  get charSet() {
    if (!this._charSet)
      this._charSet = "UTF-8"; // use "UTF-8". Defaults to ascii if null.
    return this._charSet;
  }
};
	
			Alles anzeigen