//
Ich hatte ein Komma vergessen.... :shock:
:shock::shock::shock: Das geht ja wohl gaaaanich... :mrgreen:
//
Ich hatte ein Komma vergessen.... :shock:
:shock::shock::shock: Das geht ja wohl gaaaanich... :mrgreen:
Ich organisiere gerade mein Nightly neu, das heißt, das ich alle Legacy-Erweiterungen verbannen möchte...
Einige Scripts sind hinsichtlich des Ortes des Buttons auf die Verwendung mit CTR abgestimmt, die natürlich nicht mehr passen
Bei der Umschreibung von einigen Scripts tue ich mich schwer..
Die Buttons bzw. der Eintrag soll oben neben den bereits vorhandenen erscheinen... wer kann helfen?
[attachment=0]URLBar.PNG[/attachment]
Wobei die Zeit und das Datum gar nicht auftaucht... :cry:
/* ############################################################ Statusbar - Uhr ####################################################### */
function doDatUhrCallback() {try{doDatUhr();}catch(ex){} }
function doDatUhr() {
var days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
var months = ["Jan", "Feb", "März", "Apr", "Mai", "Juni", "Juli", "Aug", "Sep", "Okt", "Nov", "Dez"];
var title = content.document.title;
window.setTimeout(doDatUhrCallback, 1000);
var D = new Date();
var day = days[D.getDay()];
var month = months[D.getMonth()];
var year = D.getFullYear();
var hour = D.getHours();
var minute = D.getMinutes();
var second = D.getSeconds();
var date = " " + day + ", " + (D.getDate() < 10 ? "0" +D.getDate() : D.getDate()) + ". " + month + " " + year + " ";
var time = (hour < 10 ? "0" +hour : hour) + ":" + (minute < 10 ? "0" +minute : minute) + ":" + (second < 10 ? "0" +second : second);
var timestr = date + time + "" + " ";
var text =" Nightly 64bit ";
var status = document.getElementById("urlbar-clock-display");
status.setAttribute("value", text + timestr);}
var ClockStatus = document.getElementById("urlbar-display");
// var ClockStatus = document.getElementById("ae-clippings-icon");
var ClockLabel = document.createElement("label");
ClockLabel.setAttribute("id", "urlbar-clock-display");
ClockLabel.setAttribute("class", "urlbarpanel-text");
ClockLabel.setAttribute("style", "padding-top: 5px; padding-left: 1px; padding-right: 1px; color:black; font-size: 12px; font-weight:bold;text-shadow:none");
ClockStatus.parentNode.insertBefore(ClockLabel, ClockStatus.nextSibling);
doDatUhr();
Alles anzeigen
Diese Buttons sind in der Adressleiste, sollen aber daneben...
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<?xml-stylesheet href="data:text/css,
@namespace%20url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
@namespace%20html%20url('http://www.w3.org/1999/xhtml');
%23preferencesbuttonIcon {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADy0lEQVR4nAXBa0wbBQAH8P/d9XG9lrtrGV17pa6VjIbXBgwG6DoX/cJcYmZIXIwa5wcyNEajkanRJX7SxSzxi36Z02mEKZosI0zY3DLcmgwQhG1uhayjQIE+dtCVlj7u1fP3Iz74KYqyKgO6hnhaprxOWptfK+1jTISTptSbLo4oUBQJkiCgazLUYg7JyD3w2jJu3LgGUlI0SLKCucX8ie4OIfpfJP92+27HD1/1No1ui7GXDEQZRqIMiiyDAGA0kGB5FmYrD5a1geg7G8F0eIPNKaR46Yt2kw4COoCSCvz9z1IsmtSX0o/Xput8Ff2qIoPQClAySdh0EUo+DcrV3ktLcvlM936h1lfNWX4PJbUzfzyUF0QYDjQLXKCm0rcQjlZvi9Hv7Q5eMeoyzIQEh5UCW2EBGYvnjnYf2tV3qKPaHknIGDzdf8S0+Gt1KjQw9vP4Y2RloMpKVh1t526t3x/fqyklQC0BugaKMoBEcU3+8tyk+NfdNCRQ2NV0QH+uhjh79dy7h3cSBWzmgarWZy3TG7tb5a34i7Hw7R2J5fAe6GUQBEAFj52cfxIrrO8P1vaYaRNoXjiy9Gi1OaPwRIn1QCJNWEip4LIr+PjE4RcCT1e/VxeoOf7n5cujPp8vRaqqgkzZ/ObDRBHj99IwVTodda+8T67wjdCYCiyvZhG98HWZydxEqSTB5XLRW1tbhnD4gaCqKihP+6vQMvm5f69esG1GHmwqzgY/Y2Mwez+FrKxD1Skkb51/zUBk45pS6vD7/QiFQqssx39k53mN8u47hh0ORWyse+oSmxiuXdNbD26sp9G/N4a704u5xSvfvvN8sHawsaVzdP7O5MttbW0uv99vVxXleCgUukJuZ7OQi3moigTXM2+dst35vPcN7ySaGgR80mM11Xu2y+lUjJ69fT3Q2NhYIcsycrkcrFarIIpi2fBkNQLSYYSNsEGHWd/Jk8Guzj0oFArgeIf5s5Mfnl9ZWfmOZVmz3W6nstksBgYGNmdmZiaam5uXDFx+DmbaCUZxwla2IilJ0sjICIrFItxuN4LBIARBYPL5PHK5HCwWC6ampn5kWfaU1+uVKdZKwVFhhJMzg2MAhmGuDQ788ogkydOiKB4MBAKVmUxGHxoaysiybEkkEvrw8PBvPT09E6qqghAEAS0tLRAEAQxjAU1bQNM0dF3H2NjYN52dnX2hUOg6z/Ovx+PxT41G42xDQ8NFj8ejyrIMwu12o76+HgzDwGg0wmq1guM4UBQFgiAwMTEhkCSpdXV1pXRdBwCUSiUoigJJkvA/ZkG9QWy1G6AAAAAASUVORK5CYII=);
}
" type="text/css"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<toolbar id="urlbar">
<toolbarbutton
id="preferencesbuttonIcon"
class="toolbarbutton-1"
label="Einstellungen"
tooltiptext="Einstellungen öffnen"
oncommand="try{openOptionsDialog();}catch(e){openPreferences();}"/>
</toolbar>
</overlay>
Alles anzeigen
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="data:text/css,
@namespace%20url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
@namespace%20html%20url('http://www.w3.org/1999/xhtml');
%23ramback-toolbar-button {
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOcSURBVHjaYvz%2F%2Fz8DJQAggBgU5OUZeHl5GSQlJRnY2dkZ%2BPj4GLi5uRn4%2Bfmzvb29X6qpqW1lZGQUAqllZWVlkJGRAdNiYmIMnJycDAABxIJsGMg1nz9%2F5tHS0loSHBzsq6Ojw%2FTmzRuvNWvWXN6%2Ff3%2FCnz9%2FdgMNQ3EAQAAxCwgIMHz%2F%2Fp2BmZmZ4ffv3852dna7gJrNgbYw3rx5k%2BHXr18MBgYGvEAXhj948EAYaMnOHz9%2BgG0HyQEEEDPQqQxfvn4FObkrICBgMtBWocePHzO8evWK4e%2FfvwwfPnxg%2BPbtG4O8vDyzhoaGBdBFgc%2BePdsHNOAt0EIGgABi5uTg0JCTl9%2Fq7Owc9vPnT%2Bbr169DTAa6CBQmoPAAOp3h3r17DO%2Ffv2cAWiDBw80d%2F%2Fbt28%2Ffv307CxBAzH4hYddMLazUjh4%2ByHD%2F%2Fn0GHh4ekGsYhISEGFhYWMAuePHiBZh%2B8uQJw727dxlMLK3YhcUkPW%2FdvM4AEEAsfrYWwiqi4gxf3r9jOHHiKDiEQZqBrgF7A6QR5ILv374DDWRlUNHUZGACikn%2B%2FcYIdIknQAAxRwk8yjGy%2Fc8tKWzJICSvw%2FD0%2BWOGZ0%2BfMjx6%2BBCsGRTAX798YRAUFmJQ09Jn4P7BwBDpzMxgIPaMYf32u%2BcAAojp1VeBS9y8fxi%2BbalmMGe7x%2BDvHcAgoaDK8AUYcK9evgQbIK%2BmyaCsZsigzPKWwfrPQQZ1yc8M39ll%2F3358fcIQACx2Mvxqfx49wKYMHgZpE2%2FMDxdsJbBkFOBgc%2FJjeHa1QsMAiJiDPw%2F%2FzJwnd%2FHENlixsDz1oTh%2FY1bDBJSRoxiHMycAAEAQQC%2B%2FwTW2dP95K%2F9AOryJf4T5eoCEvDJADFYEwC7xgkA9h8mAAHs6QBhUxIABd4CAPba0gDsACv%2F3sfq%2FxccxwL9%2Fv4fAgBBAL7%2FAq7H50BmkuSYHxL9%2FQP25QDm9xv%2BGh0JAPDZwQDh5esA8ebcACEY8QD4Cib%2B7ejtACwd9AGktu%2FXT5DXid36%2B4oCiCFOiINBBJgkPYSY6lOlGF4vibL99f9s9P9gdc43QlIKx9V4uK%2FfmG%2F2%2F9Lc6H85EsyvIxRZnrMzMiTCkjJAAIENkAYyOCBc%2BXYbqQuny5X%2F6wswHgcJiDEwqK6LEf%2ByIVXlvzAD0wSIEAIABBDYACkgQxiIuYFYgoFBGpj12pgYGLxB8iDXKTIwBPEyMLQAmeKMaLkZIMAAUM1Z7n%2BaufcAAAAASUVORK5CYII%3D);
}
" type="text/css"?>
<overlay id="ramback-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript"><![CDATA[
var ramback = {
onMenuItemCommand: function(e) {
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
// since we don't know the order of how things are going to go, fire these multiple times
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "dump-mem-stats", "clean up, pig!");
},
onToolbarButtonCommand: function(e) {
// just reuse the function above. you can change this, obviously!
ramback.onMenuItemCommand(e);
}
};
]]></script>
<menupopup id="menu_ToolsPopup">
<menuitem id="ramback-hello" label="Internen Speicher leeren" insertafter="sanitizeItem"
oncommand="ramback.onMenuItemCommand(event);"/>
</menupopup>
<toolbar id="urlbar">
<toolbarbutton id="ramback-toolbar-button"
label="Clear Caches"
tooltiptext="Internen Speicher leeren"
oncommand="ramback.onToolbarButtonCommand()"
class="toolbarbutton-1"/>
</toolbar>
</overlay>
Alles anzeigen
Und das Script Autopagerize funktioniert gar nicht mehr... :cry:
// ==UserScript==
// @name uAutoPagerize
// @namespace http://d.hatena.ne.jp/Griever/
// @description loading next page and inserting into current page.
// @include main
// @compatibility Firefox 17
// @charset UTF-8
// @version 0.3.0
// @note 0.3.0 本家に倣って Cookie の処理を変更した
// @note 0.2.9 remove E4X
// @note 0.2.8 履歴に入れる機能を廃止
// @note 0.2.7 Firefox 14 でとりあえず動くように修正
// @note 0.2.6 組み込みの SITEINFO を修正
// @note 0.2.5 MICROFORMAT も設定ファイルから追加・無効化できるようにした
// @note 0.2.5 スペースアルクで動かなくなってたのを修正
// @note 0.2.4 SITEINFO のソートをやめてチェックの仕方を変えた(一度SITEINFOを更新した方がいいかも)
// @note 0.2.4 naver まとめ、kakaku.com 修正
// @note 0.2.3 kakaku.com のスペック検索に対応
// @note 0.2.3 Fx7 くらいから xml で動かなくなってたのを修正
// @note 0.2.3 ver 0.2.2 で nextLink に form 要素が指定されている場合などに動かなくなってたのを修正
// @note 0.2.2 コンテキストメニューが意外と邪魔だったので葬った
// @note 0.2.1 コンテキストメニューに次のページを開くメニューを追加
// @note 0.2.1 区切りのアイコンをクリックしても色が変わらなかったのを修正
// @note 0.2.0 INCLUDE を設定できるようにした
// @note 0.2.0 INCLUDE, EXCLUDE をワイルドカード式にした
// @note 0.2.0 アイコンに右クリックメニューを付けた
// @note 0.2.0 スクロールするまでは次を読み込まないオプションをつけた
// ==/UserScript==
// this script based on
// AutoPagerize version: 0.0.41 2009-09-05T16:02:17+09:00 (http://autopagerize.net/)
// oAutoPagerize (http://d.hatena.ne.jp/os0x/searchdiary?word=%2a%5boAutoPagerize%5d)
//
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
(function(css) {
// ワイルドカード(*)で記述する
var INCLUDE = [
"*"
];
var EXCLUDE = [
'https://mail.google.com/*'
,'http://www.google.co.jp/reader/*'
,'http://b.hatena.ne.jp/*'
,'http://www.livedoor.com/*'
,'http://reader.livedoor.com/*'
,'http://fastladder.com/*'
];
var MY_SITEINFO = [
{
url : 'http://eow\\.alc\\.co\\.jp/[^/]+'
,nextLink : 'id("AutoPagerizeNextLink")'
,pageElement: 'id("resultsList")/ul'
,exampleUrl : 'http://eow.alc.co.jp/%E3%81%82%E3%82%8C/UTF-8/ http://eow.alc.co.jp/are'
},
{
url : '^https?://(?:images|www)\\.google(?:\\.[^./]{2,3}){1,2}/(images\\?|search\\?.*tbm=isch)'
,nextLink : 'id("nn")/parent::a | id("navbar navcnt nav")//td[last()]/a'
,pageElement: 'id("ImgCont ires")/table | id("ImgContent")'
,exampleUrl : 'http://images.google.com/images?ndsp=18&um=1&safe=off&q=image&sa=N&gbv=1&sout=1'
},
{
url : '^http://matome\\.naver\\.jp'
,nextLink : '//div[contains(@class, "MdPagination0")]/strong[1]/following-sibling::a[1]'
,pageElement: '//div[contains(concat(" ", @class, " "), " MdMTMWidgetList01 ")]|//ul[@class="MdMTMTtlList02" or @class="MdTopMTMList01"]'
,exampleUrl : 'http://matome.naver.jp/odai/2127476492987286301 http://matome.naver.jp/topic/1LwZ0'
},
{
url : '^https?://mobile\\.twitter\\.com/'
,nextLink : '//div[contains(concat(" ",normalize-space(@class)," "), " w-button-more ")]/a[@href]'
,pageElement : '//div[@class="timeline"]/table[@class="tweet"] | //div[@class="user-list"]/table[@class="user-item"]'
,exampleUrl : 'https://mobile.twitter.com/ https://mobile.twitter.com/search?q=css'
},
{
url : '^http://dailynews\\.yahoo\\.co\\.jp/fc/\\w+'
,nextLink : '//a[text()="[記事全文]" and contains(@href, ".yahoo.co.jp/")]'
,pageElement : 'id("ynDetail detailHeadline detailNewsOpen")'
,insertBefore: 'id("detailHeadline")/a/following-sibling::*'
,exampleUrl : 'http://dailynews.yahoo.co.jp/fc/sports/iwakuma_hisashi/?1331001936'
},
{
url : '^http://kakaku\\.com/specsearch/\\d+'
,nextLink : 'id("AutoPagerizeNextLink")'
,pageElement : '//tr[@class="bgColor02"][1]|//tr[@class="bgColor02"][1]/following-sibling::tr'
,exampleUrl : 'http://kakaku.com/specsearch/0150/'
}
];
var MICROFORMAT = [
// {
// url : '^https?://.',
// nextLink : '//link[contains(concat(" ", translate(normalize-space(@rel), "ENTX", "entx"), " "), " next ")] | //a[contains(concat(" ", translate(normalize-space(@rel), "ENTX", "entx"), " "), " next ")]',
// pageElement: '//*[contains(concat(" ", normalize-space(@class), " "), " hentry ")]'
// },
{
url : '^https?://.*',
nextLink : '//a[@rel="next"] | //link[@rel="next"]',
pageElement : '//*[contains(@class, "autopagerize_page_element")]',
insertBefore: '//*[contains(@class, "autopagerize_insert_before")]',
}
];
var SITEINFO_IMPORT_URLS = [
'http://wedata.net/databases/AutoPagerize/items.json'
];
var COLOR = {
on: '#0f0',
off: '#ccc',
enable: '#0f0',
disable: '#ccc',
loading: '#0ff',
terminated: '#00f',
error: '#f0f'
}
let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
if (!window.Services) Cu.import("resource://gre/modules/Services.jsm");
if (typeof window.uAutoPagerize != 'undefined') {
window.uAutoPagerize.theEnd();
}
// 以下 設定が無いときに利用する
var FORCE_TARGET_WINDOW = true;
var BASE_REMAIN_HEIGHT = 400;
var DEBUG = false;
var AUTO_START = true;
var SCROLL_ONLY = false;
var CACHE_EXPIRE = 24 * 60 * 60 * 1000;
var XHR_TIMEOUT = 30 * 1000;
var ns = window.uAutoPagerize = {
INCLUDE_REGEXP : /./,
EXCLUDE_REGEXP : /^$/,
MICROFORMAT : MICROFORMAT.slice(),
MY_SITEINFO : MY_SITEINFO.slice(),
SITEINFO : [],
get prefs() {
delete this.prefs;
return this.prefs = Services.prefs.getBranch("uAutoPagerize.");
},
get file() {
var aFile = Services.dirsvc.get('UChrm', Ci.nsILocalFile);
aFile.appendRelativePath('_uAutoPagerize.js');
delete this.file;
return this.file = aFile;
},
get INCLUDE() INCLUDE,
set INCLUDE(arr) {
try {
this.INCLUDE_REGEXP = arr.length > 0 ?
new RegExp(arr.map(wildcardToRegExpStr).join("|")) :
/./;
INCLUDE = arr;
} catch (e) {
log("INCLUDE が不正です");
}
return arr;
},
get EXCLUDE() EXCLUDE,
set EXCLUDE(arr) {
try {
this.EXCLUDE_REGEXP = arr.length > 0 ?
new RegExp(arr.map(wildcardToRegExpStr).join("|")) :
/^$/;
EXCLUDE = arr;
} catch (e) {
log("EXCLUDE が不正です");
}
return arr;
},
get AUTO_START() AUTO_START,
set AUTO_START(bool) {
updateIcon();
return AUTO_START = !!bool;
},
get BASE_REMAIN_HEIGHT() BASE_REMAIN_HEIGHT,
set BASE_REMAIN_HEIGHT(num) {
num = parseInt(num, 10);
if (!num) return num;
let m = $("uAutoPagerize-BASE_REMAIN_HEIGHT");
if (m) m.setAttribute("tooltiptext", BASE_REMAIN_HEIGHT = num);
return num;
},
get DEBUG() DEBUG,
set DEBUG(bool) {
let m = $("uAutoPagerize-DEBUG");
if (m) m.setAttribute("checked", DEBUG = !!bool);
return bool;
},
get FORCE_TARGET_WINDOW() FORCE_TARGET_WINDOW,
set FORCE_TARGET_WINDOW(bool) {
let m = $("uAutoPagerize-FORCE_TARGET_WINDOW");
if (m) m.setAttribute("checked", FORCE_TARGET_WINDOW = !!bool);
return bool;
},
get SCROLL_ONLY() SCROLL_ONLY,
set SCROLL_ONLY(bool) {
let m = $("uAutoPagerize-SCROLL_ONLY");
if (m) m.setAttribute("checked", SCROLL_ONLY = !!bool);
return bool;
},
init: function() {
ns.style = addStyle(css);
ns.icon = $('urlbar').appendChild($C("urlbarpanel", {
id: "uAutoPagerize-icon",
class: "statusbarpanel-iconic-text",
state: "disable",
tooltiptext: "disable",
onclick: "if (event.button != 2) uAutoPagerize.iconClick(event);",
context: "uAutoPagerize-popup",
}));
/* ns.icon = $('urlbar').appendChild($C("image", {
id: "uAutoPagerize-icon",
state: "disable",
tooltiptext: "disable",
onclick: "if (event.button != 2) uAutoPagerize.iconClick(event);",
context: "uAutoPagerize-popup",
style: "padding: 0px 2px;",
})); */
var xml = '\
<menupopup id="uAutoPagerize-popup"\
position="after_start"\
onpopupshowing="if (this.triggerNode) this.triggerNode.setAttribute(\'open\', \'true\');"\
onpopuphiding="if (this.triggerNode) this.triggerNode.removeAttribute(\'open\');">\
<menuitem label="EIN/AUS"\
oncommand="uAutoPagerize.toggle(event);"/>\
<menuitem label="Konfigurationsdatei laden"\
oncommand="uAutoPagerize.loadSetting(true);"/>\
<menuitem label="Seiten Info zurücksetzen"\
oncommand="uAutoPagerize.resetSITEINFO();"/>\
<menuseparator/>\
<menuitem label="Seitenlinks in neuem Tab öffnen"\
id="uAutoPagerize-FORCE_TARGET_WINDOW"\
type="checkbox"\
autoCheck="false"\
checked="'+ FORCE_TARGET_WINDOW +'"\
oncommand="uAutoPagerize.FORCE_TARGET_WINDOW = !uAutoPagerize.FORCE_TARGET_WINDOW;"/>\
<menuitem label="Abstand"\
id="uAutoPagerize-BASE_REMAIN_HEIGHT"\
tooltiptext="'+ BASE_REMAIN_HEIGHT +'"\
oncommand="uAutoPagerize.BASE_REMAIN_HEIGHT = prompt(\'\', uAutoPagerize.BASE_REMAIN_HEIGHT);"/>\
<menuitem label="Nur Scrollen"\
id="uAutoPagerize-SCROLL_ONLY"\
type="checkbox"\
autoCheck="false"\
checked="'+ SCROLL_ONLY +'"\
oncommand="uAutoPagerize.SCROLL_ONLY = !uAutoPagerize.SCROLL_ONLY;"/>\
<menuitem label="Testmodus"\
id="uAutoPagerize-DEBUG"\
type="checkbox"\
autoCheck="false"\
checked="'+ DEBUG +'"\
oncommand="uAutoPagerize.DEBUG = !uAutoPagerize.DEBUG;"/>\
</menupopup>\
';
var range = document.createRange();
range.selectNodeContents($('mainPopupSet'));
range.collapse(false);
range.insertNode(range.createContextualFragment(xml.replace(/\n|\t/g, '')));
range.detach();
["DEBUG", "AUTO_START", "FORCE_TARGET_WINDOW", "SCROLL_ONLY"].forEach(function(name) {
try {
ns[name] = ns.prefs.getBoolPref(name);
} catch (e) {}
}, ns);
try {
ns["BASE_REMAIN_HEIGHT"] = ns.prefs.getIntPref("BASE_REMAIN_HEIGHT");
} catch (e) {}
if (!getCache())
requestSITEINFO();
ns.INCLUDE = INCLUDE;
ns.EXCLUDE = EXCLUDE;
ns.addListener();
ns.loadSetting();
updateIcon();
},
uninit: function() {
ns.removeListener();
["DEBUG", "AUTO_START", "FORCE_TARGET_WINDOW", "SCROLL_ONLY"].forEach(function(name) {
try {
ns.prefs.setBoolPref(name, ns[name]);
} catch (e) {}
}, ns);
try {
ns.prefs.setIntPref("BASE_REMAIN_HEIGHT", ns["BASE_REMAIN_HEIGHT"]);
} catch (e) {}
},
theEnd: function() {
var ids = ["uAutoPagerize-icon", "uAutoPagerize-popup"];
for (let [, id] in Iterator(ids)) {
let e = document.getElementById(id);
if (e) e.parentNode.removeChild(e);
}
ns.style.parentNode.removeChild(ns.style);
ns.removeListener();
},
destroy: function() {
ns.theEnd();
ns.uninit();
delete window.uAutoPagerize;
},
addListener: function() {
gBrowser.mPanelContainer.addEventListener('DOMContentLoaded', this, true);
gBrowser.mTabContainer.addEventListener('TabSelect', this, false);
window.addEventListener('uAutoPagerize_destroy', this, false);
window.addEventListener('unload', this, false);
},
removeListener: function() {
gBrowser.mPanelContainer.removeEventListener('DOMContentLoaded', this, true);
gBrowser.mTabContainer.removeEventListener('TabSelect', this, false);
window.removeEventListener('uAutoPagerize_destroy', this, false);
window.removeEventListener('unload', this, false);
},
handleEvent: function(event) {
switch(event.type) {
case "DOMContentLoaded":
if (this.AUTO_START)
this.launch(event.target.defaultView);
break;
case "TabSelect":
if (this.AUTO_START)
updateIcon();
break;
case "uAutoPagerize_destroy":
this.destroy(event);
break;
case "unload":
this.uninit(event);
break;
}
},
loadSetting: function(isAlert) {
var data = loadText(this.file);
if (!data) return false;
var sandbox = new Cu.Sandbox( new XPCNativeWrapper(window) );
sandbox.INCLUDE = null;
sandbox.EXCLUDE = null;
sandbox.MY_SITEINFO = [];
sandbox.MICROFORMAT = [];
sandbox.USE_MY_SITEINFO = true;
sandbox.USE_MICROFORMAT = true;
try {
Cu.evalInSandbox(data, sandbox, '1.8');
} catch (e) {
return log('load error.', e);
}
ns.MY_SITEINFO = sandbox.USE_MY_SITEINFO ? sandbox.MY_SITEINFO.concat(MY_SITEINFO): sandbox.MY_SITEINFO;
ns.MICROFORMAT = sandbox.USE_MICROFORMAT ? sandbox.MICROFORMAT.concat(MICROFORMAT): sandbox.MICROFORMAT;
if (sandbox.INCLUDE)
ns.INCLUDE = sandbox.INCLUDE;
if (sandbox.EXCLUDE)
ns.EXCLUDE = sandbox.EXCLUDE;
if (isAlert)
Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService)
.showAlertNotification(null, 'uAutoPagerize', 'Konfigurationsdatei lesen', false, "", null, "");
return true;
},
getFocusedWindow: function() {
var win = document.commandDispatcher.focusedWindow;
return (!win || win == window) ? content : win;
},
launch: function(win, timer){
var locationHref = win.location.href;
if (locationHref.indexOf('http') !== 0 ||
!ns.INCLUDE_REGEXP.test(locationHref) ||
ns.EXCLUDE_REGEXP.test(locationHref))
return updateIcon();
var doc = win.document;
if (!/html|xml/i.test(doc.contentType) ||
doc.body instanceof HTMLFrameSetElement ||
win.frameElement && !(win.frameElement instanceof HTMLFrameElement) ||
doc.querySelector('meta[http-equiv="refresh"]'))
return updateIcon();
if (typeof win.AutoPagerize == 'undefined') {
win.filters = [];
win.documentFilters = [];
win.requestFilters = [];
win.responseFilters = [];
win.AutoPagerize = {
addFilter : function(f) { win.filters.push(f) },
addDocumentFilter : function(f) { win.documentFilters.push(f); },
addResponseFilter : function(f) { win.responseFilters.push(f); },
addRequestFilter : function(f) { win.requestFilters.push(f); },
launchAutoPager : function(l) { launchAutoPager_org(l, win); }
}
// uAutoPagerize original
win.fragmentFilters = [];
}
var ev = doc.createEvent('Event');
ev.initEvent('GM_AutoPagerizeLoaded', true, false);
doc.dispatchEvent(ev);
var miscellaneous = [];
// 継ぎ足されたページからは新しいタブで開く
win.fragmentFilters.push(function(df){
if (!ns.FORCE_TARGET_WINDOW) return;
var arr = Array.slice(df.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])'));
arr.forEach(function (elem){
elem.setAttribute('target', '_blank');
});
});
var index = -1, info;
if (/\bgoogle\.(?:com|co\.jp)$/.test(win.location.host)) {
if (!timer || timer < 400) timer = 400;
win.addEventListener("hashchange", function(event) {
if (!win.ap) {
win.setTimeout(function(){
let [index, info] = [-1, null];
if (!info) [, info] = ns.getInfo(ns.MY_SITEINFO, win);
if (!info) [, info] = ns.getInfo(null, win);
if (info) win.ap = new AutoPager(win.document, info);
updateIcon();
}, timer);
return;
}
let info = win.ap.info;
win.ap.destroy(true);
win.setTimeout(function(){
win.ap = new AutoPager(win.document, info);
updateIcon();
}, timer);
}, false);
// Google Video
var datas = [];
var docFil = function(newDoc) {
var x = getFirstElementByXPath('//script/text()[contains(self::text(), "data:image/jpeg")]', newDoc);
if (!x) return;
datas = x.nodeValue.match(/data:image\/jpeg\;base64\,[A-Za-z0-9/+]+(?:\\x3d)*/g) || [];
};
var dfrFil = function(df) {
datas.forEach(function(d, i){
var elem = df.querySelector('#vidthumb' + (i+1) + ', .vidthumb' + (i+1));
if (!elem) return;
elem.src = d.replace(/\\x3d/g, "=");
});
};
win.documentFilters.push(docFil);
win.fragmentFilters.push(dfrFil);
}
else if (/^https?:\/\/(?:images|www)\.google(?:\.[^.\/]{2,3}){1,2}\/(images\?|search\?.*tbm=isch)/.test(locationHref)) {
// Google Image
[, info] = ns.getInfo(ns.MY_SITEINFO, win);
if (info) {
if (!timer || timer < 1000) timer = 1000;
win.requestFilters.push(function(opt) {
opt.url = opt.url
.replace(/&?(gbv=\d|sout=\d)/g, "")
.replace("?", '?gbv=1&sout=1&')
});
}
}
// oAutoPagerize
else if (win.location.host === 'eow.alc.co.jp') {
var alc = function(_doc, _url){
var a,r = _doc.evaluate('//p[@id="paging"]/a[last()]',
_doc,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
if (r.singleNodeValue) a = r.singleNodeValue;
else return;
var word = _url.indexOf('search?') >= 0 ?
_url.match(/[?&]q=([^&]+)/):
_url.match(/eow\.alc\.co\.jp\/([^/]+)/);
if (!word || !word[1]) return;
a.id = 'AutoPagerizeNextLink';
a.href = a.href.replace(/javascript:goPage\("(\d+)"\)/,'http://eow.alc.co.jp/search?q='+ word[1] +'&pg=$1');
};
win.documentFilters.push(alc);
miscellaneous.push(alc);
}
else if (win.location.host === 'matome.naver.jp') {
[, info] = ns.getInfo(ns.MY_SITEINFO, win);
if (info) {
var naver = function(_doc){
var next = getFirstElementByXPath(info.nextLink, _doc);
if (next) {
next.href = win.location.pathname + '?page=' + next.textContent;
}
}
win.documentFilters.push(naver);
miscellaneous.push(naver);
}
}
else if (win.location.host === "www.youtube.com") {
// from youtube_AutoPagerize_fix.js https://gist.github.com/761717
win.fragmentFilters.push(function(df) {
Array.slice(df.querySelectorAll('img[data-thumb]')).forEach(function(img) {
img.src = img.getAttribute('data-thumb');
img.removeAttribute('data-thumb');
});
});
}
else if (win.location.host === 'www.dailymotion.com') {
win.fragmentFilters.push(function(df) {
Array.slice(df.querySelectorAll('img[data-src]')).forEach(function(img) {
img.src = img.getAttribute('data-src');
img.removeAttribute('data-src');
});
});
}
else if (/^http:\/\/kakaku\.com\/specsearch\/\d+/.test(locationHref)) {
let nextLink = '//img[@alt="次へ"]/parent::a[starts-with(@onclick, "return page")]';
let next = getFirstElementByXPath(nextLink, doc);
if (next) {
let df = function (_doc) {
var form = _doc.querySelector('form[name="specForm"]');
if (!form) return;
var next = getFirstElementByXPath(nextLink, _doc);
if (!next) return;
next.id = 'AutoPagerizeNextLink';
var postData = Array.slice(form.elements).map(function(elem){
return /^(?:button|submit)$/.test(elem.type) ||
(elem.type == 'checkbox' && !elem.checked) ||
!elem.name ?
'' :
elem.name + '=' + encodeURIComponent(elem.value);
})
.filter(function(elem) !!elem )
.join('&')
.replace(/\bPage=\d*/, 'Page=' + /\d+/.exec(next.getAttribute('onclick')));
next.href = locationHref + '##?' + postData;
};
let rf = function (opt) {
opt.method = 'post';
opt.send = opt.url.replace(/.*?[#?]+/, '');
opt.headers['content-type'] = 'application/x-www-form-urlencoded';
};
miscellaneous.push(df);
win.documentFilters.push(df);
win.requestFilters.push(rf);
}
}
win.setTimeout(function(){
win.ap = null;
miscellaneous.forEach(function(func){ func(doc, locationHref); });
var index = -1;
if (!info) [, info] = ns.getInfo(ns.MY_SITEINFO, win);
if (info) {
if (info.requestFilter)
win.requestFilters.push(info.requestFilter.bind(win));
if (info.responseFilter)
win.responseFilters.push(info.responseFilter.bind(win));
if (info.documentFilter)
win.documentFilters.push(info.documentFilter.bind(win));
if (info.filter)
win.filters.push(info.filter.bind(win));
if (info.fragmentFilter)
win.fragmentFilters.push(info.fragmentFilter.bind(win));
if (info.startFilter)
info.startFilter.call(win, win.document);
if (info.stylish) {
let style = doc.createElement("style");
style.setAttribute("id", "uAutoPagerize-style");
style.setAttribute("type", "text/css");
style.appendChild(doc.createTextNode(info.stylish));
doc.getElementsByTagName("head")[0].appendChild(style);
}
}
//var s = new Date().getTime();
if (!info) [index, info] = ns.getInfo(ns.SITEINFO, win);
//debug(index + 'th/' + (new Date().getTime() - s) + 'ms');
if (!info) [, info] = ns.getInfo(ns.MICROFORMAT, win);
if (info) win.ap = new AutoPager(win.document, info);
updateIcon();
}, timer||0);
},
iconClick: function(event){
if (!event || !event.button) {
ns.toggle();
} else if (event.button == 1) {
ns.loadSetting(true);
}
},
resetSITEINFO: function() {
if (confirm('Seiten Infos zurücksetzen?'))
requestSITEINFO();
},
toggle: function() {
if (ns.AUTO_START) {
ns.AUTO_START = false;
updateIcon();
} else {
ns.AUTO_START = true;
if (!content.ap)
ns.launch(content);
else updateIcon();
}
},
getInfo: function (list, win) {
if (!list) list = ns.SITEINFO;
if (!win) win = content;
var doc = win.document;
var locationHref = doc.location.href;
for (let [index, info] in Iterator(list)) {
try {
var exp = info.url_regexp || Object.defineProperty(info, "url_regexp", {
enumerable: false,
value: new RegExp(info.url)
}).url_regexp;
if ( !exp.test(locationHref) ) continue;
var nextLink = getFirstElementByXPath(info.nextLink, doc);
if (!nextLink) {
// FIXME microformats case detection.
// limiting greater than 12 to filter microformats like SITEINFOs.
if (info.url.length > 12)
debug('nextLink not found.', info.nextLink);
continue;
}
var pageElement = getFirstElementByXPath(info.pageElement, doc);
if (!pageElement) {
if (info.url.length > 12)
debug('pageElement not found.', info.pageElement);
continue;
}
return [index, info, nextLink, pageElement];
} catch(e) {
log('error at launchAutoPager() : ' + e);
}
}
return [-1, null];
},
getInfoFromURL: function (url) {
if (!url) url = content.location.href;
var list = ns.SITEINFO;
return list.filter(function(info, index, array) {
try {
var exp = info.url_regexp || Object.defineProperty(info, "url_regexp", {
enumerable: false,
value: new RegExp(info.url)
}).url_regexp;
return exp.test(url);
} catch(e){ }
});
},
};
// Class
function AutoPager(doc, info) {
this.init.apply(this, arguments);
};
AutoPager.prototype = {
req: null,
pageNum: 1,
_state: 'Deaktiviert',
get state() this._state,
set state(state) {
if (this.state !== "Beendet" && this.state !== "error") {
if (state === "Deaktiviert") {
this.abort();
}
else if (state === "Beendet" && state === "error") {
this.removeListener();
}
if (this.state !== "Laden" && state !== "Laden" || this.isFrame) {
Array.forEach(this.doc.getElementsByClassName('autopagerize_icon'), function(e) {
e.style.backgroundColor = COLOR[state];
e.setAttribute("state", state);
});
}
this._state = state;
updateIcon();
}
return state;
},
init: function(doc, info) {
this.doc = doc;
this.win = doc.defaultView;
this.documentElement = doc.documentElement;
this.body = doc.body;
this.isXML = this.doc.contentType.indexOf('xml') > 0;
this.isFrame = this.win.top != this.win;
this.info = {};
for (let [key, val] in Iterator(info)) {
this.info[key] = val;
}
var url = this.getNextURL(this.doc);
if ( !url ) {
debug("getNextURL returns null.", this.info.nextLink);
return;
}
this.setInsertPoint();
if (!this.insertPoint) {
debug("insertPoint not found.", this.info.pageElement);
return;
}
this.setRemainHeight();
if (this.isFrame)
this.initIcon();
this.requestURL = url;
this.loadedURLs = {};
this.loadedURLs[doc.location.href] = true;
this.state = "Aktiviert";
this.win.addEventListener("pagehide", this, false);
this.addListener();
if (!ns.SCROLL_ONLY)
this.scroll();
if (this.getScrollHeight() == this.win.innerHeight)
this.body.style.minHeight = (this.win.innerHeight + 1) + 'px';
},
destroy: function(isRemoveAddPage) {
this.state = "Deaktiviert";
this.win.removeEventListener("pagehide", this, false);
this.removeListener();
this.abort();
if (isRemoveAddPage) {
var separator = this.doc.querySelector('.autopagerize_page_separator, .autopagerize_page_info');
if (separator) {
var range = this.doc.createRange();
range.setStartBefore(separator);
range.setEndBefore(this.insertPoint);
range.deleteContents();
range.detach();
}
var style = this.doc.getElementById("uAutoPagerize-style");
if (style)
style.parentNode.removeChild(style);
}
this.win.ap = null;
updateIcon();
},
addListener: function() {
this.win.addEventListener("scroll", this, false);
this.doc.addEventListener("AutoPagerizeToggleRequest", this, false);
this.doc.addEventListener("AutoPagerizeEnableRequest", this, false);
this.doc.addEventListener("AutoPagerizeDisableRequest", this, false);
},
removeListener: function() {
this.win.removeEventListener("scroll", this, false);
this.doc.removeEventListener("AutoPagerizeToggleRequest", this, false);
this.doc.removeEventListener("AutoPagerizeEnableRequest", this, false);
this.doc.removeEventListener("AutoPagerizeDisableRequest", this, false);
},
handleEvent: function(event) {
switch(event.type) {
case "scroll":
if (this.timer)
this.win.clearTimeout(this.timer);
this.timer = this.win.setTimeout(function(){
this.scroll();
this.timer = null;
}.bind(this), 100);
break;
case "click":
this.stateToggle();
break;
case "pagehide":
this.abort();
break;
case "AutoPagerizeToggleRequest":
this.stateToggle();
break;
case "AutoPagerizeEnableRequest":
this.state = "Aktiviert";
break;
case "AutoPagerizeDisableRequest":
this.state = "Deaktiviert";
break;
}
},
stateToggle: function() {
this.state = this.state == 'Deaktiviert'? 'Aktiviert' : 'Deaktiviert';
},
scroll : function(){
if (this.state !== 'Aktiviert' || !ns.AUTO_START) return;
var remain = this.getScrollHeight() - this.win.innerHeight - this.win.scrollY;
if (remain < this.remainHeight) {
this.request();
}
},
abort: function() {
if (this.req) {
this.req.abort();
this.req = null;
}
},
isThridParty: function(aHost, bHost) {
try {
var aTLD = Services.eTLD.getBaseDomainFromHost(aHost);
var bTLD = Services.eTLD.getBaseDomainFromHost(bHost);
return aTLD === bTLD;
} catch (e) {
return aHost === bHost;
}
},
request : function(){
// if (!this.requestURL || this.lastRequestURL == this.requestURL) return;
if (!this.requestURL || this.loadedURLs[this.requestURL]) return;
var [reqScheme,,reqHost] = this.requestURL.split('/');
var {protocol, host} = this.win.location;
if (reqScheme !== protocol) {
log(protocol + " が " + reqScheme + "にリクエストを送ることはできません");
this.state = "error";
return;
}
var isSameDomain = reqHost == host;
if (!isSameDomain && !this.isThridParty(host, reqHost)) {
log(host + " が " + reqHost + "にリクエストを送ることはできません");
this.state = 'error';
return;
}
this.lastRequestURL = this.requestURL;
var self = this;
var headers = {};
if (isSameDomain)
headers.Cookie = getCookie(reqHost, reqScheme === 'https');
var opt = {
method: 'get',
get url() self.requestURL,
set url(url) self.requestURL = url,
headers: headers,
overrideMimeType: 'text/html; charset=' + this.doc.characterSet,
onerror: function(){ self.state = 'error'; self.req = null; },
onload: function(res) { self.requestLoad.apply(self, [res]); self.req = null; }
}
this.win.requestFilters.forEach(function(i) { i(opt) }, this);
this.state = 'loading';
this.req = GM_xmlhttpRequest(opt);
},
requestLoad : function(res){
var before = res.URI.host;
var after = res.originalURI.host;
if (before != after && !this.isThridParty(before, after)) {
log(before + " が " + after + "にリダイレクトされました");
this.state = 'error';
return;
}
delete res.URI;
delete res.originalURI;
this.win.responseFilters.forEach(function(i) { i(res, this.requestURL) }, this);
if (res.finalUrl)
this.requestURL = res.finalUrl;
var str = res.responseText;
var htmlDoc;
if (this.isXML) {
htmlDoc = new DOMParser().parseFromString(str, "application/xml");
} else {
// thx! http://pc12.2ch.net/test/read.cgi/software/1253771697/478
htmlDoc = this.doc.cloneNode(false);
htmlDoc.appendChild(htmlDoc.importNode(this.documentElement, false));
var range = this.doc.createRange();
//range.selectNodeContents(this.body);
htmlDoc.documentElement.appendChild(range.createContextualFragment(str));
range.detach();
}
this.win.documentFilters.forEach(function(i) { i(htmlDoc, this.requestURL, this.info) }, this);
try {
var page = getElementsByXPath(this.info.pageElement, htmlDoc);
var url = this.getNextURL(htmlDoc);
}
catch(e){
this.state = 'error';
return;
}
if (!page || page.length < 1 ) {
debug('pageElement not found.' , this.info.pageElement);
this.state = 'Beendet';
return;
}
if (this.loadedURLs[this.requestURL]) {
debug('page is already loaded.', this.requestURL, this.info.nextLink);
this.state = 'Beendet';
return;
}
if (typeof this.win.ap == 'undefined') {
this.win.ap = { state: 'Aktiviert' };
updateIcon();
}
this.loadedURLs[this.requestURL] = true;
if (this.insertPoint.compareDocumentPosition(this.doc) >= 32) {
this.setInsertPoint();
if (!this.insertPoint) {
debug("insertPoint not found.", this.info.pageElement);
this.state = 'Beendet';
return;
}
this.setRemainHeight();
}
page = this.addPage(htmlDoc, page);
this.win.filters.forEach(function(i) { i(page) });
this.requestURL = url;
this.state = 'Aktiviert';
// if (!ns.SCROLL_ONLY)
// this.scroll();
if (!url) {
debug('nextLink not found.', this.info.nextLink, htmlDoc);
this.state = 'Beendet';
}
var ev = this.doc.createEvent('Event');
ev.initEvent('GM_AutoPagerizeNextPageLoaded', true, false);
this.doc.dispatchEvent(ev);
},
addPage : function(htmlDoc, page){
var fragment = this.doc.createDocumentFragment();
page.forEach(function(i) { fragment.appendChild(i); });
this.win.fragmentFilters.forEach(function(i) { i(fragment, htmlDoc, page) }, this);
if (this.info.wrap) {
var div = this.doc.createElement("div");
div.setAttribute("class", "uAutoPagerize-wrapper");
div.appendChild(fragment);
fragment = this.doc.createDocumentFragment();
fragment.appendChild(div);
}
var hr = this.doc.createElement('hr');
hr.setAttribute('class', 'autopagerize_page_separator');
hr.setAttribute('style', 'clear: both;');
var p = this.doc.createElement('p');
p.setAttribute('class', 'autopagerize_page_info');
p.setAttribute('style', 'clear: both;');
p.innerHTML = '<a class="autopagerize_link" href="' +
this.requestURL.replace(/&/g, '&') + '">Seite: ' + (++this.pageNum) + '</a> ';
if (!this.isFrame) {
var o = p.insertBefore(this.doc.createElement('div'), p.firstChild);
o.setAttribute('class', 'autopagerize_icon');
o.setAttribute('state', 'enable');
o.style.cssText = [
'background: ', COLOR['enable'], ';'
,'width: .8em;'
,'height: .8em;'
,'padding: 0px;'
,'margin: 0px .4em 0px 0px;'
,'display: inline-block;'
,'vertical-align: middle;'
].join('');
o.addEventListener('click', this, false);
}
var insertParent = this.insertPoint.parentNode;
if (page[0] && page[0].tagName == 'TR') {
var colNodes = getElementsByXPath('child::tr[1]/child::*[self::td or self::th]', insertParent);
var colums = 0;
for (var i = 0, l = colNodes.length; i < l; i++) {
var col = colNodes[i].getAttribute('colspan');
colums += parseInt(col, 10) || 1;
}
var td = this.doc.createElement('td');
td.appendChild(hr);
td.appendChild(p);
var tr = this.doc.createElement('tr');
td.setAttribute('colspan', colums);
tr.appendChild(td);
fragment.insertBefore(tr, fragment.firstChild);
} else {
fragment.insertBefore(p, fragment.firstChild);
fragment.insertBefore(hr, fragment.firstChild);
}
insertParent.insertBefore(fragment, this.insertPoint);
return page.map(function(pe) {
var ev = this.doc.createEvent('MutationEvent');
ev.initMutationEvent('AutoPagerize_DOMNodeInserted', true, false,
insertParent, null,
this.requestURL, null, null);
pe.dispatchEvent(ev);
return pe;
}, this);
},
getNextURL : function(doc) {
var nextLink = doc instanceof HTMLElement ?
doc :
getFirstElementByXPath(this.info.nextLink, doc);
if (nextLink) {
var nextValue = nextLink.getAttribute('href') ||
nextLink.getAttribute('action') || nextLink.value;
if (nextValue && nextValue.indexOf('http') != 0) {
var anc = this.doc.createElement('a');
anc.setAttribute('href', nextValue);
nextValue = anc.href;
anc = null;
}
return nextValue;
}
},
getPageElementsBottom : function() {
try {
var elem = getElementsByXPath(this.info.pageElement, this.doc).pop();
return getElementBottom(elem);
}
catch(e) {}
},
getScrollHeight: function() {
return Math.max(this.documentElement.scrollHeight, this.body.scrollHeight);
},
setInsertPoint: function() {
var insertPoint = null;
if (this.info.insertBefore) {
insertPoint = getFirstElementByXPath(this.info.insertBefore, this.doc);
}
if (!insertPoint) {
var lastPageElement = getElementsByXPath(this.info.pageElement, this.doc).pop();
if (lastPageElement) {
insertPoint = lastPageElement.nextSibling ||
lastPageElement.parentNode.appendChild(this.doc.createTextNode(' '));
}
lastPageElement = null;
}
this.insertPoint = insertPoint;
},
setRemainHeight: function() {
var scrollHeight = this.getScrollHeight();
var bottom = getElementPosition(this.insertPoint).top ||
this.getPageElementsBottom() || Math.round(scrollHeight * 0.8);
this.remainHeight = scrollHeight - bottom + ns.BASE_REMAIN_HEIGHT;
},
initIcon: function() {
var div = this.doc.createElement("div");
div.setAttribute('id', 'autopagerize_icon');
div.setAttribute('class', 'autopagerize_icon');
div.setAttribute('state', this.state);
div.style.cssText = [
'font-size: 12px;'
,'position: fixed;'
,'z-index: 9999;'
,'top: 3px;'
,'right: 3px;'
,'width: 10px;'
,'height: 10px;'
,'border: 1px inset #999;'
,'padding: 0px;'
,'margin: 0px;'
,'color: #fff;'
,'background: ' + COLOR[this.state]
].join(" ");
this.icon = this.body.appendChild(div);
this.icon.addEventListener('click', this, false);
},
};
function updateIcon(){
var newState = "";
if (ns.AUTO_START == false) {
newState = "Aus";
} else {
if (content.ap) {
newState = content.ap.state;
} else {
newState = "Deaktiviert";
}
}
ns.icon.setAttribute('state', newState);
ns.icon.setAttribute('tooltiptext', newState);
}
function launchAutoPager_org(list, win) {
try {
var doc = win.document;
var locationHref = win.location.href;
} catch(e) {
return;
}
list.some(function(info, index, array) {
try {
var exp = new RegExp(info.url);
if (win.ap) {
} else if ( ! exp.test(locationHref) ) {
} else if (!getFirstElementByXPath(info.nextLink, doc)) {
// ignore microformats case.
if (!exp.test('http://a'))
debug('nextLink not found.', info.nextLink);
} else if (!getFirstElementByXPath(info.pageElement, doc)) {
if (!exp.test('http://a'))
debug('pageElement not found.', info.pageElement);
} else {
win.ap = new AutoPager(doc, info);
return true;
}
} catch(e) {
log('error at launchAutoPager() : ' + e);
}
});
updateIcon();
}
function getElementsByXPath(xpath, node) {
var nodesSnapshot = getXPathResult(xpath, node, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);
var data = [];
for (var i = 0, l = nodesSnapshot.snapshotLength; i < l; i++) {
data[i] = nodesSnapshot.snapshotItem(i);
}
return data;
}
function getFirstElementByXPath(xpath, node) {
var result = getXPathResult(xpath, node, XPathResult.FIRST_ORDERED_NODE_TYPE);
return result.singleNodeValue;
}
function getXPathResult(xpath, node, resultType) {
var doc = node.ownerDocument || node;
var resolver = doc.createNSResolver(node.documentElement || node);
var defaultNS = null;
try {
defaultNS = (node.nodeType == node.DOCUMENT_NODE) ?
node.documentElement.lookupNamespaceURI(null):
node.lookupNamespaceURI(null);
} catch(e) {}
if (defaultNS) {
const defaultPrefix = '__default__';
xpath = addDefaultPrefix(xpath, defaultPrefix);
var defaultResolver = resolver;
resolver = function (prefix) {
return (prefix == defaultPrefix)
? defaultNS : defaultResolver.lookupNamespaceURI(prefix);
}
}
return doc.evaluate(xpath, node, resolver, resultType, null);
}
function addDefaultPrefix(xpath, prefix) {
const tokenPattern = /([A-Za-z_\u00c0-\ufffd][\w\-.\u00b7-\ufffd]*|\*)\s*(::?|\()?|(".*?"|'.*?'|\d+(?:\.\d*)?|\.(?:\.|\d+)?|[\)\]])|(\/\/?|!=|[<>]=?|[\(\[|,=+-])|([@$])/g
const TERM = 1, OPERATOR = 2, MODIFIER = 3
var tokenType = OPERATOR
prefix += ':'
function replacer(token, identifier, suffix, term, operator, modifier) {
if (suffix) {
tokenType =
(suffix == ':' || (suffix == '::' &&
(identifier == 'attribute' || identifier == 'namespace')))
? MODIFIER : OPERATOR
}
else if (identifier) {
if (tokenType == OPERATOR && identifier != '*') {
token = prefix + token
}
tokenType = (tokenType == TERM) ? OPERATOR : TERM
}
else {
tokenType = term ? TERM : operator ? OPERATOR : MODIFIER
}
return token
}
return xpath.replace(tokenPattern, replacer)
};
function getElementPosition(elem) {
var offsetTrail = elem;
var offsetLeft = 0;
var offsetTop = 0;
while (offsetTrail) {
offsetLeft += offsetTrail.offsetLeft;
offsetTop += offsetTrail.offsetTop;
offsetTrail = offsetTrail.offsetParent;
}
return {left: offsetLeft || null, top: offsetTop|| null};
}
function getElementBottom(elem) {
var doc = elem.ownerDocument;
if ('getBoundingClientRect' in elem) {
var rect = elem.getBoundingClientRect();
var top = parseInt(rect.top, 10) + (doc.body.scrollTop || doc.documentElement.scrollTop);
var height = parseInt(rect.height, 10);
} else {
var c_style = doc.defaultView.getComputedStyle(elem, '');
var height = 0;
var prop = ['height', 'borderTopWidth', 'borderBottomWidth',
'paddingTop', 'paddingBottom',
'marginTop', 'marginBottom'];
prop.forEach(function(i) {
var h = parseInt(c_style[i]);
if (typeof h == 'number') {
height += h;
}
});
var top = getElementPosition(elem).top;
}
return top ? (top + height) : null;
}
function getCookie(host, needSecureCookie) {
var result = []
var cookieManager = Cc['@mozilla.org/cookiemanager;1'].getService(Ci.nsICookieManager2);
var enumerator = cookieManager.getCookiesFromHost(host);
var cookie;
while (enumerator.hasMoreElements()) {
cookie = enumerator.getNext().QueryInterface(Ci.nsICookie2);
if (!cookie.isSecure || needSecureCookie) {
result.push(cookie.name + '=' + cookie.value);
}
}
return result.join('; ');
}
// end utility functions.
function getCache() {
try{
var cache = loadFile('uAutoPagerize.json');
if (!cache) return false;
cache = JSON.parse(cache);
ns.SITEINFO = cache;
log('Load cacheInfo.');
return true;
}catch(e){
log('Error getCache.')
return false;
}
}
function requestSITEINFO(){
var xhrStates = {};
SITEINFO_IMPORT_URLS.forEach(function(i) {
var opt = {
method: 'get',
url: i,
onload: function(res) {
xhrStates[i] = 'loaded';
getCacheCallback(res, i);
},
onerror: function(res) {
xhrStates[i] = 'error';
getCacheErrorCallback(i);
},
}
xhrStates[i] = 'start';
GM_xmlhttpRequest(opt);
setTimeout(function() {
if (xhrStates[i] == 'start') {
getCacheErrorCallback(i);
}
}, XHR_TIMEOUT);
});
};
function getCacheCallback(res, url) {
if (res.status != 200) {
return getCacheErrorCallback(url);
}
var temp;
try {
temp = Cu.evalInSandbox(res.responseText, Cu.Sandbox("about:blank"));
} catch(e) {
log(e);
}
if (!temp || !temp.length)
return getCacheErrorCallback(url);
var info = [];
temp.forEach(function(i){
var data = i.data;
if (!data.url || data.url.length <= 12) return;
try {
var exp = new RegExp(data.url);
if (exp.test('http://a')) return;
var o = {
url: data.url,
nextLink: data.nextLink,
pageElement: data.pageElement,
};
Object.defineProperty(o, 'url_regexp', {
enumerable: false,
value: exp
});
if (data.insertBefore)
o.insertBefore = data.insertBefore;
//o.resource_url = i.resource_url;
info.push(o);
} catch (e) {}
});
info.sort(function(a, b) b.url.length - a.url.length);
saveFile('uAutoPagerize.json', JSON.stringify(info));
ns.SITEINFO = info;
log('getCacheCallback:' + url);
}
function getCacheErrorCallback(url) {
log('getCacheErrorCallback:' + url);
}
function GM_xmlhttpRequest(obj, win) {
if (typeof(obj) != 'object' || (typeof(obj.url) != 'string' && !(obj.url instanceof String))) return;
if (!win || "@maone.net/noscript-service;1" in Cc) win = window;
var req = new win.XMLHttpRequest();
req.open(obj.method || 'GET',obj.url,true);
if (typeof(obj.headers) == 'object')
for(var i in obj.headers)
req.setRequestHeader(i,obj.headers[i]);
if (obj.overrideMimeType)
req.overrideMimeType(obj.overrideMimeType);
['onload','onerror','onreadystatechange'].forEach(function(k) {
if (obj[k] && (typeof(obj[k]) == 'function' || obj[k] instanceof Function)) req[k] = function() {
obj[k]({
status : (req.readyState == 4) ? req.status : 0,
statusText : (req.readyState == 4) ? req.statusText : '',
responseHeaders : (req.readyState == 4) ? req.getAllResponseHeaders() : '',
responseText : req.responseText,
responseXML : req.responseXML,
readyState : req.readyState,
finalUrl : (req.readyState == 4) ? req.channel.URI.spec : '',
URI : req.channel.URI,
originalURI : req.channel.originalURI
});
};
});
req.send(obj.send || null);
return req;
}
function wildcardToRegExpStr(urlstr) {
if (urlstr.source) return urlstr.source;
let reg = urlstr.replace(/[()\[\]{}|+.,^$?\\]/g, "\\$&").replace(/\*+/g, function(str){
return str === "*" ? ".*" : "[^/]*";
});
return "^" + reg + "$";
}
function log(){ Services.console.logStringMessage('[uAutoPagerize] ' + $A(arguments)); }
function debug(){ if (ns.DEBUG) Services.console.logStringMessage('[uAutoPagerize DEBUG] ' + $A(arguments)); };
function $(id, doc) (doc || document).getElementById(id);
function $A(arr) Array.slice(arr);
function $C(name, attr) {
var el = document.createElement(name);
if (attr) Object.keys(attr).forEach(function(n) el.setAttribute(n, attr[n]));
return el;
}
function addStyle(css) {
var pi = document.createProcessingInstruction(
'xml-stylesheet',
'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"'
);
return document.insertBefore(pi, document.documentElement);
}
function loadFile(aLeafName) {
var aFile = Services.dirsvc.get('UChrm', Ci.nsILocalFile);
aFile.appendRelativePath(aLeafName);
return loadText(aFile);
}
function loadText(aFile) {
if (!aFile.exists() || !aFile.isFile()) return null;
var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
fstream.init(aFile, -1, 0, 0);
sstream.init(fstream);
var data = sstream.read(sstream.available());
try { data = decodeURIComponent(escape(data)); } catch(e) {}
sstream.close();
fstream.close();
return data;
}
function saveFile(name, data) {
var file = Services.dirsvc.get('UChrm', Ci.nsILocalFile);
file.appendRelativePath(name);
var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
suConverter.charset = 'UTF-8';
data = suConverter.ConvertFromUnicode(data);
var foStream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0);
foStream.write(data, data.length);
foStream.close();
};
})('\
#uAutoPagerize-icon {\
list-style-image: url(\
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAQCAYAAACBSfjBAAAA2klEQVRYhe\
2WwYmGMBhE390+0kCOwZLswQK82YAg2Ict2IBdeJ3/FHcW9oewnoRv4N0yGB4TECLPs22bHIBlWeQAzP\
Msp/a7q5MDkM4kB6DsRc7PDaTfQEqnHIBSdjm1fXWXHIAznXIA9rLLub+esxyA4zjkfDsXAkNgCHy/wM\
jDtK5tHEc5td+6tn7t5dz9xrX1/Sqn9lvXtvarnNpvXdtfLzUEhsAQ+H6BkYdpXdswDHJqv3Vtecpy7n\
7j2nKe5NR+69qmPMmp/da1ff2NCYEhMAS+WmDk//kA2XH2W9CWRjQAAAAASUVORK5CYII=\
);\
-moz-image-region: rect(0px 16px 16px 0px );\
}\
\
#uAutoPagerize-icon[state="Aktiviert"] { -moz-image-region: rect(0px 32px 16px 16px); }\
#uAutoPagerize-icon[state="Beendet"] { -moz-image-region: rect(0px 48px 16px 32px); }\
#uAutoPagerize-icon[state="error"] { -moz-image-region: rect(0px 64px 16px 48px); }\
#uAutoPagerize-icon[state="Aus"] { -moz-image-region: rect(0px 80px 16px 64px); }\
\
\
#uAutoPagerize-icon[state="Laden"] {\
list-style-image: url(data:image/gif;base64,\
R0lGODlhEAAQAKEDADC/vyHZ2QD//////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgADACwAAAAAEAAQ\
AAACIJyPacKi2txDcdJmsw086NF5WviR32kAKvCtrOa2K3oWACH5BAkKAAMALAAAAAAQABAAAAIinI9p\
wTEChRrNRanqi1PfCYLACIQHWZoDqq5kC8fyTNdGAQAh+QQJCgADACwAAAAAEAAQAAACIpyPacAwAcMQ\
VKz24qyXZbhRnRNJlaWk6sq27gvH8kzXQwEAIfkECQoAAwAsAAAAABAAEAAAAiKcj6kDDRNiWO7JqSqU\
1O24hCIilMJomCeqokPrxvJM12IBACH5BAkKAAMALAAAAAAQABAAAAIgnI+pCg2b3INH0uquXqGH7X1a\
CHrbeQiqsK2s5rYrehQAIfkECQoAAwAsAAAAABAAEAAAAiGcj6nL7Q+jNKACaO/L2E4mhMIQlMEijuap\
pKSJim/5DQUAIfkECQoAAwAsAAAAABAAEAAAAiKcj6nL7Q+jnLRaJbIYoYcBhIChbd4njkPJeaBIam33\
hlUBACH5BAEKAAMALAAAAAAQABAAAAIgnI+py+0PoxJUwGofvlXKAAYDQAJLKJamgo7lGbqktxQAOw==\
);\
}\
\
'.replace(/\n|\t/g, ''));
window.uAutoPagerize.init();
Alles anzeigen
Soweit zunächst...
Wobei die Zeit und das Datum gar nicht auftaucht.
Bitte testen:
function doDatUhrCallback() {try{doDatUhr();}catch(ex){} }
function doDatUhr() {
var days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
var months = ["Jan", "Feb", "März", "Apr", "Mai", "Juni", "Juli", "Aug", "Sep", "Okt", "Nov", "Dez"];
window.setTimeout(doDatUhrCallback, 1000);
var D = new Date();
var day = days[D.getDay()];
var month = months[D.getMonth()];
var year = D.getFullYear();
var hour = D.getHours();
var minute = D.getMinutes();
var second = D.getSeconds();
var date = " " + day + ", " + (D.getDate() < 10 ? "0" +D.getDate() : D.getDate()) + ". " + month + " " + year + " ";
var time = (hour < 10 ? "0" +hour : hour) + ":" + (minute < 10 ? "0" +minute : minute) + ":" + (second < 10 ? "0" +second : second);
var timestr = date + time + "" + " ";
var text ="Nightly 64bit >";
var status = document.getElementById("statusbar-clock-display");
status.setAttribute("value",text + timestr);}
//var ClockStatus = document.getElementById("statusbar-display");
var ClockStatus = document.getElementById("reload-button");
var ClockLabel = document.createElement("label");
ClockLabel.setAttribute("id", "statusbar-clock-display");
ClockLabel.setAttribute("class", "statusbarpanel-text");
ClockLabel.setAttribute("style", "padding-top: 1px; padding-left: 50px;color:yellow;font-weight:bold;text-shadow:none");
ClockStatus.parentNode.insertBefore(ClockLabel, ClockStatus.nextSibling);
doDatUhr();
Alles anzeigen
Nee, leider nix zu sehen...
zu den beiden Button-Skripten:
Ersetze "urlbar" durch "nav-bar". Das steht in beiden in der ca. achten Zeile von unten.
zu AutoPagerize:
Ersetze 'mTabContainer' überall durch 'tabContainer'. Funktioniert es dann?
Zu Autopagerize.uc.js
Hat leider nichts gebracht.
Konsole sagt jede Menge dazu:
NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 1 [nsIProperties.get] autopagerize.uc.js:1395
saveFile file:///xxx/Profilordner/chrome/autopagerize.uc.js:1395:13
getCacheCallback file://xxx/Profilordner/chrome/autopagerize.uc.js:1306:2
onload file:///xxx/Profilordner/chrome/autopagerize.uc.js:1252:5
GM_xmlhttpRequest/</req[k] file:///xxx/Profilordner/chrome/autopagerize.uc.js:1331:4
TypeError: content is null[Weitere Informationen] autopagerize.uc.js:1076:1
updateIcon file:///xxx/Profilordner/chrome/autopagerize.uc.js:1076:1
handleEvent file:///xxx/Profilordner/chrome/autopagerize.uc.js:336:6
updateCurrentBrowser chrome://browser/content/tabbrowser.xml:1262:15
onselect chrome://browser/content/browser.xul:1:44
set_selectedIndex chrome://browser/content/tabbrowser.xml:8261:13
set_selectedPanel chrome://global/content/bindings/tabbox.xml:691:13
set_selectedIndex chrome://global/content/bindings/tabbox.xml:409:15
set_selectedItem chrome://global/content/bindings/tabbox.xml:441:34
set_selectedTab chrome://global/content/bindings/tabbox.xml:111:15
set_selectedTab chrome://browser/content/tabbrowser.xml:3681:11
loadOneTab chrome://browser/content/tabbrowser.xml:1693:15
enter resource:///modules/CustomizeMode.jsm:234:19
oncommand chrome://browser/content/browser.xul:1:1
TypeError: content is null[Weitere Informationen] autopagerize.uc.js:1076:1
updateIcon file:///xxx/Profilordner/chrome/autopagerize.uc.js:1076:1
handleEvent file:///xxx/Profilordner/chrome/autopagerize.uc.js:336:6
updateCurrentBrowser chrome://browser/content/tabbrowser.xml:1262:15
onselect chrome://browser/content/browser.xul:1:44
set_selectedIndex chrome://browser/content/tabbrowser.xml:8261:13
set_selectedPanel chrome://global/content/bindings/tabbox.xml:691:13
set_selectedIndex chrome://global/content/bindings/tabbox.xml:409:15
set_selectedItem chrome://global/content/bindings/tabbox.xml:441:34
_selectNewTab chrome://global/content/bindings/tabbox.xml:486:11
onxblmousedown chrome://global/content/bindings/tabbox.xml:808:11
expression closures are deprecated[Weitere Informationen] autopagerize.uc.js:155:15
TypeError: $(...) is null[Weitere Informationen] autopagerize.uc.js:214:13
2017-08-29 07:44:03 userChromeJS userChrome.loadScript: [UChrm]/AutoPopup.uc.js
init file:///xxx/Profilordner/chrome/autopagerize.uc.js:214:13
<anonym> file:///xxx/Profilordner/chrome/autopagerize.uc.js:1441:1
loadScript/< file://xxx/firefox/userChromeJS.js:109:7
Alles anzeigen
Ich fürchte da ist wohl nichts mehr zu retten.
Mfg.
Endor
@ aborix... das war schon mal gut... :klasse:
[attachment=0]Nav-bar.PNG[/attachment]
Wie kriege ich die beiden Buttons rechts zu den anderen vor die Suchleiste.. egal wo?
@ Autopagerize... habe via Endor ein GM-Script erhalten und das funktioniert... Danke, Endor..
Für Interessenten:
https://greasyfork.org/de/scripts/4348-autopagerize
Hat jemand noch Ideen zur Uhranzeige.. Clock in Statusbar.... also dann quasi Clock in Nav-Bar?
Ferner funktioniert auch dieses Script nicht:
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
const buttonId = 'bookmarks-manager-button';
const buttonLabel = 'Lesezeichen Manager';
const buttonTooltiptext = 'Lesezeichen Manager';
const buttonIcon = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVQ4y6XTPYgVVxTA8f/ce2fu7Mx7vuf6srsa425cxFWEiDwCgpXpErELIVYWVolYWGmdKoVdLGwUGwXFJggWwq42hpBmiUaW1f2I7Pfs+p6773Pm3jspXtwEIhLwNIdTnB/nHDjwgeGNXrhz2JfysPC8/9fgrLAmez7105lnAOpAZejxwYGBiud5QA78N3cyRymSLG6kHBmJ+G1ueX0KPgJQ8ytppbXZ/tt/N5Aax9gnEUndUm84Xm/aytuJVBxZzn3VT0lbjMkoFIskawmDQ4MALC8ts3vPx9STJcKoSK3r8/CP9vZKqhhJjh/sZyB2ZFlGuVxmYSFleLgHzBaa7N8/SDJxlXj3SZZ0lesT8h/Aw1Kr1dAGjDEYY+h2uyRJAkCapiTzk4TpS7orIbUdo3jYbUD4SqJ1gNaaMAzRWhMEvVprjQ588pVHxJ+eQDRnCESGr/41QeALCnFEHAustcRxTNZcIepOkdsO0eZLivYZQh2lsKtEafUmJ8p93LldOZ21my3lkdNoNChKhXMOYwx27QnmzXVk3y524qEKZTCzyD7H3uwpl6ot8u7wXVbnppX2JYU4Jo57QBAEtPZ9CYsvoPWAoOCBWAMrgBwVtbGdOp3X6+M27fyglPRQvsL3fZxz+L6PHxbRY5fJFg9g1r9DFTKgB+TOMvnnCMNbW9+7jHlVb6Zr1x5OC19CnoMQHtZZpFBIPlMXR2VZ7ehC6noGMN0eMtWz87MAaiZ583UcBkIJsX3ZABOkqLQa3j+mj7euEIBdpeEFKLGH8ItDv7fe+zA3btyr/vrkl32dcXHeJWxlk0y0fubzzgNOmSmemle02/c5AqDeBUgpyzNzy9+M7B3b6F94/qPd4FZ0mlmAdJwFUeJbIXu9fwFVCBajMWIWPQAAAABJRU5ErkJggg==)';
function buttonFunction() {
oncommand=PlacesCommandHook.showPlacesOrganizer('AllBookmarks');
};
var button = document.createElement('toolbarbutton');
button.id = buttonId;
button.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional');
button.removable = 'true';
button.setAttribute('label', buttonLabel);
button.setAttribute('tooltiptext', buttonTooltiptext);
button.style.listStyleImage = buttonIcon;
button.addEventListener('click', function (event) {
if (event.button == 0)
buttonFunction();
});
document.getElementById('nav-bar').palette.appendChild(button);
var toolbars = Array.slice(document.querySelectorAll('toolbar'));
for (var i=0; i<toolbars.length; i++) {
var currentset = toolbars[i].getAttribute('currentset');
if (currentset.split(',').indexOf(button.id) >= 0) {
var j;
if (i == 0) j = 1
else j = 0;
toolbars[j].currentSet += ','+button.id;
toolbars[i].currentSet = currentset;
};
};
}) ();
Alles anzeigen
Hallo Boersenfeger.
Teste mal bookmarksmanager:
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
const buttonId = 'bookmarks-manager-button';
const buttonLabel = 'Lesezeichen Manager';
const buttonTooltiptext = 'Lesezeichen Manager';
const buttonIcon = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVQ4y6XTPYgVVxTA8f/ce2fu7Mx7vuf6srsa425cxFWEiDwCgpXpErELIVYWVolYWGmdKoVdLGwUGwXFJggWwq42hpBmiUaW1f2I7Pfs+p6773Pm3jspXtwEIhLwNIdTnB/nHDjwgeGNXrhz2JfysPC8/9fgrLAmez7105lnAOpAZejxwYGBiud5QA78N3cyRymSLG6kHBmJ+G1ueX0KPgJQ8ytppbXZ/tt/N5Aax9gnEUndUm84Xm/aytuJVBxZzn3VT0lbjMkoFIskawmDQ4MALC8ts3vPx9STJcKoSK3r8/CP9vZKqhhJjh/sZyB2ZFlGuVxmYSFleLgHzBaa7N8/SDJxlXj3SZZ0lesT8h/Aw1Kr1dAGjDEYY+h2uyRJAkCapiTzk4TpS7orIbUdo3jYbUD4SqJ1gNaaMAzRWhMEvVprjQ588pVHxJ+eQDRnCESGr/41QeALCnFEHAustcRxTNZcIepOkdsO0eZLivYZQh2lsKtEafUmJ8p93LldOZ21my3lkdNoNChKhXMOYwx27QnmzXVk3y524qEKZTCzyD7H3uwpl6ot8u7wXVbnppX2JYU4Jo57QBAEtPZ9CYsvoPWAoOCBWAMrgBwVtbGdOp3X6+M27fyglPRQvsL3fZxz+L6PHxbRY5fJFg9g1r9DFTKgB+TOMvnnCMNbW9+7jHlVb6Zr1x5OC19CnoMQHtZZpFBIPlMXR2VZ7ehC6noGMN0eMtWz87MAaiZ583UcBkIJsX3ZABOkqLQa3j+mj7euEIBdpeEFKLGH8ItDv7fe+zA3btyr/vrkl32dcXHeJWxlk0y0fubzzgNOmSmemle02/c5AqDeBUgpyzNzy9+M7B3b6F94/qPd4FZ0mlmAdJwFUeJbIXu9fwFVCBajMWIWPQAAAABJRU5ErkJggg==)';
function buttonFunction() {
oncommand=PlacesCommandHook.showPlacesOrganizer('AllBookmarks');
};
var button = document.createElement('toolbarbutton');
button.id = buttonId;
button.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional');
button.removable = 'true';
button.setAttribute('label', buttonLabel);
button.setAttribute('tooltiptext', buttonTooltiptext);
button.style.listStyleImage = buttonIcon;
button.addEventListener('click', function (event) {
if (event.button == 0)
buttonFunction();
});
document.getElementById('nav-bar-customization-target').insertBefore(button, document.getElementById('home-button'));
var toolbars = document.querySelectorAll('toolbar');
Array.slice(toolbars).forEach( function (toolbar) {
var currentset = toolbar.getAttribute('currentset');
if (currentset.split(',').indexOf(button.id) < 0) return;
toolbar.currentSet = currentset;
try {
BrowserToolboxCustomizeDone(true);
} catch (ex) {
}
});
}) ();
Alles anzeigen
So taucht er hier neben der Home Schaltfläche auf.
Mfg.
Endor
Nee, leider nicht..
[attachment=0]Unbenannt.PNG[/attachment]
Frage, ist das die Navbar oder was ist das für eine Leiste?
Denn ich habe ihn in die Original Nav-bar gelegt und als Ziel den Homebutton angegeben.
Zu den Buttons ganz rechts, was sind das für Scripte?
Mfg.
Endor
Zu den Buttons ganz rechts, was sind das für Scripte?
Das zweite und dritte aus # 742 mit den Änderungen von # 745.
Wie kriege ich die beiden Buttons rechts zu den anderen vor die Suchleiste.. egal wo?
Teste:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<?xml-stylesheet href="data:text/css,
@namespace%20url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
@namespace%20html%20url('http://www.w3.org/1999/xhtml');
%23preferencesbuttonIcon {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADy0lEQVR4nAXBa0wbBQAH8P/d9XG9lrtrGV17pa6VjIbXBgwG6DoX/cJcYmZIXIwa5wcyNEajkanRJX7SxSzxi36Z02mEKZosI0zY3DLcmgwQhG1uhayjQIE+dtCVlj7u1fP3Iz74KYqyKgO6hnhaprxOWptfK+1jTISTptSbLo4oUBQJkiCgazLUYg7JyD3w2jJu3LgGUlI0SLKCucX8ie4OIfpfJP92+27HD1/1No1ui7GXDEQZRqIMiiyDAGA0kGB5FmYrD5a1geg7G8F0eIPNKaR46Yt2kw4COoCSCvz9z1IsmtSX0o/Xput8Ff2qIoPQClAySdh0EUo+DcrV3ktLcvlM936h1lfNWX4PJbUzfzyUF0QYDjQLXKCm0rcQjlZvi9Hv7Q5eMeoyzIQEh5UCW2EBGYvnjnYf2tV3qKPaHknIGDzdf8S0+Gt1KjQw9vP4Y2RloMpKVh1t526t3x/fqyklQC0BugaKMoBEcU3+8tyk+NfdNCRQ2NV0QH+uhjh79dy7h3cSBWzmgarWZy3TG7tb5a34i7Hw7R2J5fAe6GUQBEAFj52cfxIrrO8P1vaYaRNoXjiy9Gi1OaPwRIn1QCJNWEip4LIr+PjE4RcCT1e/VxeoOf7n5cujPp8vRaqqgkzZ/ObDRBHj99IwVTodda+8T67wjdCYCiyvZhG98HWZydxEqSTB5XLRW1tbhnD4gaCqKihP+6vQMvm5f69esG1GHmwqzgY/Y2Mwez+FrKxD1Skkb51/zUBk45pS6vD7/QiFQqssx39k53mN8u47hh0ORWyse+oSmxiuXdNbD26sp9G/N4a704u5xSvfvvN8sHawsaVzdP7O5MttbW0uv99vVxXleCgUukJuZ7OQi3moigTXM2+dst35vPcN7ySaGgR80mM11Xu2y+lUjJ69fT3Q2NhYIcsycrkcrFarIIpi2fBkNQLSYYSNsEGHWd/Jk8Guzj0oFArgeIf5s5Mfnl9ZWfmOZVmz3W6nstksBgYGNmdmZiaam5uXDFx+DmbaCUZxwla2IilJ0sjICIrFItxuN4LBIARBYPL5PHK5HCwWC6ampn5kWfaU1+uVKdZKwVFhhJMzg2MAhmGuDQ788ogkydOiKB4MBAKVmUxGHxoaysiybEkkEvrw8PBvPT09E6qqghAEAS0tLRAEAQxjAU1bQNM0dF3H2NjYN52dnX2hUOg6z/Ovx+PxT41G42xDQ8NFj8ejyrIMwu12o76+HgzDwGg0wmq1guM4UBQFgiAwMTEhkCSpdXV1pXRdBwCUSiUoigJJkvA/ZkG9QWy1G6AAAAAASUVORK5CYII=);
}
" type="text/css"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<hbox id="nav-bar-customization-target">
<toolbarbutton
id="preferencesbuttonIcon"
class="toolbarbutton-1"
label="Einstellungen"
tooltiptext="Einstellungen öffnen"
oncommand="try{openOptionsDialog();}catch(e){openPreferences();}"
insertbefore="search-container"/>
</hbox>
</overlay>
Alles anzeigen
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="data:text/css,
@namespace%20url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');
@namespace%20html%20url('http://www.w3.org/1999/xhtml');
%23ramback-toolbar-button {
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOcSURBVHjaYvz%2F%2Fz8DJQAggBgU5OUZeHl5GSQlJRnY2dkZ%2BPj4GLi5uRn4%2Bfmzvb29X6qpqW1lZGQUAqllZWVlkJGRAdNiYmIMnJycDAABxIJsGMg1nz9%2F5tHS0loSHBzsq6Ojw%2FTmzRuvNWvWXN6%2Ff3%2FCnz9%2FdgMNQ3EAQAAxCwgIMHz%2F%2Fp2BmZmZ4ffv3852dna7gJrNgbYw3rx5k%2BHXr18MBgYGvEAXhj948EAYaMnOHz9%2BgG0HyQEEEDPQqQxfvn4FObkrICBgMtBWocePHzO8evWK4e%2FfvwwfPnxg%2BPbtG4O8vDyzhoaGBdBFgc%2BePdsHNOAt0EIGgABi5uTg0JCTl9%2Fq7Owc9vPnT%2Bbr169DTAa6CBQmoPAAOp3h3r17DO%2Ffv2cAWiDBw80d%2F%2Fbt28%2Ffv307CxBAzH4hYddMLazUjh4%2ByHD%2F%2Fn0GHh4ekGsYhISEGFhYWMAuePHiBZh%2B8uQJw727dxlMLK3YhcUkPW%2FdvM4AEEAsfrYWwiqi4gxf3r9jOHHiKDiEQZqBrgF7A6QR5ILv374DDWRlUNHUZGACikn%2B%2FcYIdIknQAAxRwk8yjGy%2Fc8tKWzJICSvw%2FD0%2BWOGZ0%2BfMjx6%2BBCsGRTAX798YRAUFmJQ09Jn4P7BwBDpzMxgIPaMYf32u%2BcAAojp1VeBS9y8fxi%2BbalmMGe7x%2BDvHcAgoaDK8AUYcK9evgQbIK%2BmyaCsZsigzPKWwfrPQQZ1yc8M39ll%2F3358fcIQACx2Mvxqfx49wKYMHgZpE2%2FMDxdsJbBkFOBgc%2FJjeHa1QsMAiJiDPw%2F%2FzJwnd%2FHENlixsDz1oTh%2FY1bDBJSRoxiHMycAAEAQQC%2B%2FwTW2dP95K%2F9AOryJf4T5eoCEvDJADFYEwC7xgkA9h8mAAHs6QBhUxIABd4CAPba0gDsACv%2F3sfq%2FxccxwL9%2Fv4fAgBBAL7%2FAq7H50BmkuSYHxL9%2FQP25QDm9xv%2BGh0JAPDZwQDh5esA8ebcACEY8QD4Cib%2B7ejtACwd9AGktu%2FXT5DXid36%2B4oCiCFOiINBBJgkPYSY6lOlGF4vibL99f9s9P9gdc43QlIKx9V4uK%2FfmG%2F2%2F9Lc6H85EsyvIxRZnrMzMiTCkjJAAIENkAYyOCBc%2BXYbqQuny5X%2F6wswHgcJiDEwqK6LEf%2ByIVXlvzAD0wSIEAIABBDYACkgQxiIuYFYgoFBGpj12pgYGLxB8iDXKTIwBPEyMLQAmeKMaLkZIMAAUM1Z7n%2BaufcAAAAASUVORK5CYII%3D);
}
" type="text/css"?>
<overlay id="ramback-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript"><![CDATA[
var ramback = {
onMenuItemCommand: function(e) {
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
// since we don't know the order of how things are going to go, fire these multiple times
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "memory-pressure", "heap-minimize");
observerService.notifyObservers(null, "dump-mem-stats", "clean up, pig!");
},
onToolbarButtonCommand: function(e) {
// just reuse the function above. you can change this, obviously!
ramback.onMenuItemCommand(e);
}
};
]]></script>
<menupopup id="menu_ToolsPopup">
<menuitem id="ramback-hello" label="Internen Speicher leeren" insertafter="sanitizeItem"
oncommand="ramback.onMenuItemCommand(event);"/>
</menupopup>
<hbox id="nav-bar-customization-target">
<toolbarbutton
id="ramback-toolbar-button"
class="toolbarbutton-1"
label="Clear Caches"
tooltiptext="Internen Speicher leeren"
oncommand="ramback.onToolbarButtonCommand()"
insertbefore="search-container"/>
</hbox>
</overlay>
Alles anzeigen
Editiert:
@ aborix: Prima, die beiden Buttons sind jetzt "drüben"
@ Endor: Nach einem weiteren Firefox-Neustart ist auch dieser Button dort..., wenn ich allerdings den Homebutton wieder ins Anpassenfeld verschiebe wandert der Lesezeichen-Manager-Button wieder nach aussen...
Vielen Dank bis hierhin..
Die Uhr ist nun auch da, allerdings unter der Leiste und die Schrift in gelb und sie geht 2 Stunden "nach..." kann man dies ändern, die Anzeige nach oben zu den anderen Buttons verschieben und die Schrift in Schwarz machen?
[attachment=0]Leiste.PNG[/attachment]
function doDatUhrCallback() {try{doDatUhr();}catch(ex){} }
function doDatUhr() {
var days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
var months = ["Jan", "Feb", "März", "Apr", "Mai", "Juni", "Juli", "Aug", "Sep", "Okt", "Nov", "Dez"];
window.setTimeout(doDatUhrCallback, 1000);
var D = new Date();
var day = days[D.getDay()];
var month = months[D.getMonth()];
var year = D.getFullYear();
var hour = D.getHours();
var minute = D.getMinutes();
var second = D.getSeconds();
var date = " " + day + ", " + (D.getDate() < 10 ? "0" +D.getDate() : D.getDate()) + ". " + month + " " + year + " ";
var time = (hour < 10 ? "0" +hour : hour) + ":" + (minute < 10 ? "0" +minute : minute) + ":" + (second < 10 ? "0" +second : second);
var timestr = date + time + "" + " ";
var text ="Nightly 64bit";
var status = document.getElementById("nav-bar-clock-display");
status.setAttribute("value",text + timestr);}
//var ClockStatus = document.getElementById("statusbar-display");
var ClockStatus = document.getElementById("nav-bar");
var ClockLabel = document.createElement("label");
ClockLabel.setAttribute("id", "nav-bar-clock-display");
ClockLabel.setAttribute("class", "nav-barpanel-text");
ClockLabel.setAttribute("style", "padding-top: 1px; padding-left: 50px;color:yellow;font-weight:bold;text-shadow:none");
ClockStatus.parentNode.insertBefore(ClockLabel, ClockStatus.nextSibling);
doDatUhr();
Alles anzeigen
Die nächsten Kandidaten:
Prominent Domain.... der Name wird nicht fett innerhalb der URL in der Adresszeile angezeigt
// ==UserScript==
// @name ProminentDomain.uc.js
// @namespace
// @description Prominent Domain
// @include main
// @compatibility Firefox 32.0a1
// @author
// @version 2015/03/11 00:00 change handle overflow
// @version 2014/02/29 00:00 change workaround
// @version 2014/02/28 00:00 Workaround Bug 1014246
// @version 2013/07/12 17:00 by Alice0775 reset horizontal scroll (workaround Bug 893312)
// @version 2012/12/05 21:00 by Alice0775 fixed getValidTld
// ==/UserScript==
// @version 2012/11/24 23:00 by Alice0775 fixed key navigation
// @version 2012/05/13 23:00 by Alice0775 Bug 754498 - Domain should not be highlighted in the address bar when the URL differs from the page
// @version 2012/01/31 11:00 by Alice0775 12.0a1 about:newtab
// @version 2011/06/24 data:等は無視
// @version 2011/06/24 Bug 665580
// @version 2011/06/10
// @Note
var ProminentDomain = {
init0: function() {
var xpPref = Components.classes['@mozilla.org/preferences-service;1']
.getService(Components.interfaces.nsIPrefBranch2);
try{
if (xpPref.setBoolPref("browser.urlbar.formatting.enabled", false))
return;
} catch(ex) {}
try{
if (xpPref.setBoolPref("browser.urlbar.trimURLs", false))
return;
} catch(ex) {}
// xxx Bug 660391 - After closing Print preview, the favicon and the domain name highlighting disappears from the navigation bar, and Back/Forward buttons are disabled
if ('PrintUtils' in window &&
!/gNavToolbox\.collapsed/.test(PrintPreviewListener._toggleAffectedChrome.toString())) {
if (!/ProminentDomain/.test(PrintUtils.exitPrintPreview.toSource()))
eval('PrintUtils.exitPrintPreview = '+PrintUtils.exitPrintPreview.toString().replace(
/}$/,
'ProminentDomain.onPrintPreviewExit(); }'
));
}
if (!(this.label = document.getElementById("textbox-input-box-button"))) {
var icons = document.getElementById("urlbar-icons");
this.label = document.createElement("label");
this.label.setAttribute("id", "textbox-input-box-button");
//this.label.setAttribute("class", "textbox-input-box");
this.label.style.setProperty("-moz-appearance", "label", "important");
this.label.style.setProperty("border", "0px", "");
this.label.style.setProperty("padding", "0px", "");
this.label.style.setProperty("margin-left", "-3px", "");
this.label.style.setProperty("margin-right", "-3px", "");
this.label.style.setProperty("background-color", "transparent", "");
this.label.style.setProperty("visibility", "collapse", "");
this.label.textContent = "";
icons.insertBefore(this.label, icons.firstChild);
}
// Workaround Bug 1014246
setTimeout(function(){this.init();}.bind(this), 0);
var self = this;
window.addEventListener("unload", this, false);
gBrowser.addProgressListener(this);
gNavToolbox.addEventListener("aftercustomization", this, false);
// observ placeContent tree view change
// create an observer instance
this.observer1 = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type == "attributes" &&
mutation.attributeName == "focused") {
ProminentDomain.debug("onFocusChange");
if (ProminentDomain._timer)
clearTimeout(ProminentDomain._timer);
if (mutation.target.getAttribute(mutation.attributeName) == "true" &&
gURLBar.getAttribute("pageproxystate") !="invalid" )
ProminentDomain.plainView();
else
ProminentDomain.prettyView();
}
});
});
// configuration of the observer:
var config1 = { attributes: true }
// pass in the target node, as well as the observer options
this.observer1.observe(gURLBar, config1);
if (document.focusedElement != gURLBar)
gURLBar.value = "";
setTimeout(function(self){
gURLBar.value = gURLBar.value || gBrowser.currentURI.spec;
self.prettyView();
}, 250, this);
},
init: function() {
if (!gURLBar ||
!document.getAnonymousElementByAttribute(gURLBar, "anonid", "input") ||
!document.getAnonymousElementByAttribute(gURLBar, "anonid", "input")
.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor)
return;
this.nNormal = document.createElementNS("http://www.w3.org/1999/xhtml", "label");
this.nNormal.appendChild(document.createTextNode(""));
this.nStrong = document.createElementNS("http://www.w3.org/1999/xhtml", "label");
this.nStrong.style.color='blue';
this.nStrong.style.marginLeft = this.nStrong.style.marginRight = "0.0em";
this.nStrong.appendChild(document.createTextNode(""));
this.nBase = document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").
QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor.rootElement;
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").
addEventListener("overflow", this, false);
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").
addEventListener("underflow", this, false);
},
uninit: function(){
window.removeEventListener("unload", this, false);
gBrowser.removeProgressListener(this);
gNavToolbox.removeEventListener("aftercustomization", this, false);
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").
removeEventListener("overflow", this, false);
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").
removeEventListener("underflow", this, false);
//stop observing
if (this.observer1)
this.observer1.disconnect();
},
handleEvent: function(event){
switch(event.type) {
case "aftercustomization":
this.onAftercustomization();
break;
case "overflow":
if(event.detail >= 1)
this.label.textContent = "...";
break;
case "underflow":
if(event.detail >= 1)
this.label.textContent = "";
break;
case "unload":
this.uninit();
break;
}
},
onAftercustomization: function() {
this.init();
this.prettyView();
},
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { },
onLocationChange: function(aProgress, aRequest, aURI) {
// This fires when the location bar changes; that is load event is confirmed
// or when the user switches tabs. If you use myListener for more than one tab/window,
// use aProgress.DOMWindow to obtain the tab/window which triggered the change.
if (aProgress.DOMWindow == content) {
ProminentDomain.debug("onLocationChange");
if (ProminentDomain._timer)
clearTimeout(ProminentDomain._timer);
ProminentDomain._timer = setTimeout(function(){
if (gURLBar.getAttribute("focused") != "true")
ProminentDomain.prettyView();
else
ProminentDomain.plainView();
}, 0);
}
},
// For definitions of the remaining functions see related documentation
onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { },
onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { },
onSecurityChange: function(aWebProgress, aRequest, aState) { },
onPrintPreviewExit: function() {
if ( typeof PrintPreviewListener._toggleAffectedChrome == "function" &&
!/gNavToolbox\.collapsed/.test(PrintPreviewListener._toggleAffectedChrome))
this.init();
this.prettyView();
},
prettyView: function()
{
this.debug("prettyView");
//xxx Bug 754498
if(gURLBar.getAttribute("pageproxystate") == "invalid")
return;
var aURI = gURLBar.value;
if (aURI == "") return; //←追加
if (/^(data:|javascript:|chrome:|view-|about:)/.test(aURI))
return;
var ioService = Components.classes['@mozilla.org/network/io-service;1']
.getService(Components.interfaces.nsIIOService);
try {
//aURI = ioService.newURI(aURI, null, null).spec;
aURI = losslessDecodeURI(ioService.newURI(aURI, null, null));
} catch(ex) {}
if (!/^(.+?\/\/(?:[^\/]+@)?)(.+?)((:\d+)?(\/.*)?)$/.test(aURI)) {
return;
}
//if ("isBlankPageURL" in window ? !isBlankPageURL(aURI) : aURI != "about:blank")
// gURLBar.removeAttribute("isempty");
this.label.style.setProperty("visibility", "visible", "");
while (this.nBase.hasChildNodes())
{
this.nBase.removeChild(this.nBase.lastChild);
}
var a1 = RegExp.$1;
var a2 = RegExp.$2;
var a3 = RegExp.$3;
//alert (a1 +" , "+ a2 +" , "+ a3)
var tld = this.getValidTld(aURI);
//alert(tld.replace(/^\[/, "\\[").replace(/\]$/, "\\]")+"$")
var r = new RegExp(tld.replace(/^\[/, "\\[").replace(/\]$/, "\\]")+"$", "");
a1 += a2.replace(r, '');
[a1, tld, a3].forEach(function(aPart, aIx) {
var node = (aIx == 1 ? this.nStrong : this.nNormal).cloneNode(true);
node.firstChild.nodeValue = aPart;
this.nBase.appendChild(node);
}, this);
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").selectionStart = 0;
document.getAnonymousElementByAttribute(gURLBar, "anonid", "input").selectionEnd = 0;
},
plainView: function()
{
this.debug("plainView");
this.label.style.setProperty("visibility", "collapse", "");
if (gURLBar.value == "") return; //←追加
this.nBase.replaceChild(document.createTextNode(gURLBar.value), this.nBase.firstChild);
while (this.nBase.childNodes.length > 1)
{
this.nBase.removeChild(this.nBase.lastChild);
}
gURLBar.select();
},
getValidTld: function(aURI){
try {
var ioService = Components.classes['@mozilla.org/network/io-service;1']
.getService(Components.interfaces.nsIIOService);
var aURI2 = ioService.newURI(aURI, null, null);
var host = aURI2.host;
} catch(e) {
if (aURI.match(/^(.+?\/\/(?:[^\/]+@)?)((?::\d+)?[^\/]+)(.*)$/)) {
var host = RegExp.$2;
} else {
return "";
}
}
var eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
.getService(Components.interfaces.nsIEffectiveTLDService);
try {
var tld = eTLDService.getBaseDomainFromHost(host);
if (host.indexOf(tld) > -1)
return tld;
else
return host;
} catch(e) {
if (/::/.test(host))
host = "[" + host + "]";
return host;
}
},
debug: function(aMsg){
return;
Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService)
.logStringMessage(aMsg);
}
}
ProminentDomain.init0();
Alles anzeigen
// ==UserScript==
// @name FxForumNewTab
// @namespace http://openuserjs.org/users/ardiman
// @description Opens posted links in new tabs.
// @description:de-DE Öffnet Links in Beiträgen im neuen Tab.
// @grant none
// @homepage https://github.com/ardiman/userscripts/tree/master/fxforumnewtab
// @icon https://raw.githubusercontent.com/ardiman/userscripts/master/scriptlogo.gif
// @include https://www.camp-firefox.de/forum/*
// @license CC BY-NC-SA 3.0; https://creativecommons.org/licenses/by-nc-sa/3.0/
// @supportURL https://github.com/ardiman/userscripts/issues
// @version 1.0.5
// @date 2014-11-21
// ==/UserScript==
var res = document.evaluate("//a[@class='postlink-local']|//a[@class='postlink']", document, null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE , null);
for(var i = 0; i < res.snapshotLength; i++) {
var elem = res.snapshotItem(i);
elem.target = "_blank";
}
Alles anzeigen
Funktioniert gar nicht... ebenfalls wie OpenNewTab...
// ==UserScript==
// @name openNewTab.uc.js
// @namespace opennewtab@haoutil.com
// @include main
// @include chrome://browser/content/places/places.xul
// @description Lesezeichen, Chronik, Suchleiste, Adressleiste in neuen Tabs öffnen
// @downloadURL https://raw.githubusercontent.com/xinggsf/uc/master/openNewTab.uc.js
// @version 1.3.1.2
// @Note xinggsf 2017.6.9 修改使之能用于FX53,修正BUG: vertical书签栏不能新开;搜索栏被移除导致脚本出错
// ==/UserScript==
(function() {
const b_urlbar = true,
b_searchbar = true,
// Inline function
whereToOpenLink_code = `{
var b_bookmarks = true;
var b_history = true;
if (!e) return 'current';
var win = window.opener || window;
if (win.isTabEmpty(win.gBrowser.mCurrentTab)) return 'current';
var node = e.originalTarget;
if (node.matches('.bookmark-item'))
return b_bookmarks ? 'tab' : 'current';
while (node) {
switch (node.id) {
case 'bookmarksMenuPopup': // menubar bookmarks
case 'BMB_bookmarksPopup': // navibar bookmarks
case 'bookmarksPanel': // sidebar bookmarks
return b_bookmarks ? 'tab' : 'current';
case 'goPopup': // menubar history
case 'PanelUI-history': // navibar history
case 'history-panel': // sidebar history
return b_history ? 'tab' : 'current';
case 'placeContent': // library bookmarks&history
var collection = window.document.getElementById('searchFilter').getAttribute('collection');
var tab = collection === "bookmarks" && b_bookmarks || collection === "history" && b_history;
return tab ? 'tab' : 'current';
}
node = node.parentNode;
}
return 'current';
}`;
if (location == 'chrome://browser/content/browser.xul') {
/* :::: Open Bookmarks/History in New Tab :::: */
eval('whereToOpenLink = ' + whereToOpenLink.toString().replace(/return "current";/g, whereToOpenLink_code));
window.document.getElementById('sidebar').addEventListener('DOMContentLoaded', function(event) {
const doc = event.originalTarget;
const win = doc.defaultView.window;
if (['chrome://browser/content/bookmarks/bookmarksPanel.xul', 'chrome://browser/content/history/history-panel.xul'].includes(win.location)) {
eval('win.whereToOpenLink=' + win.whereToOpenLink.toString().replace(/return "current";/g, whereToOpenLink_code));
} else if (win.location == 'chrome://browser/content/readinglist/sidebar.xhtml') {
/* :::: Open Sidebar ReadingList in New Tab :::: */
eval('win.RLSidebar.openURL = ' + win.RLSidebar.openURL.toString().replace(/log\.debug\(.*\);/, '').replace(/mainWindow\.openUILink\(url, event\);/, "var where = isTabEmpty(gBrowser.mCurrentTab) ? 'current' : 'tab';$&"));
}
});
/* :::: Open Url in New Tab :::: */
if (b_urlbar) {
eval('gURLBar.handleCommand=' + gURLBar.handleCommand.toString().replace(/let where = openUILinkWhere;/, "let where = isTabEmpty(gBrowser.mCurrentTab) ? 'current' : 'tab';"));
}
/* :::: Open Search in New Tab :::: */
if (b_searchbar && BrowserSearch.searchBar) {
eval('BrowserSearch.searchBar.handleSearchCommand=' + BrowserSearch.searchBar.handleSearchCommand.toString().replace(/this\.doSearch\(textValue, where(, aEngine)?\);|this\.handleSearchCommandWhere\(aEvent, aEngine, where, params\);/, "where = isTabEmpty(gBrowser.mCurrentTab) ? 'current' : 'tab';$&"));
}
} else if (location == 'chrome://browser/content/places/places.xul') {
/* :::: Open Bookmarks/History in New Tab :::: */
eval('whereToOpenLink = ' + whereToOpenLink.toString().replace(/return "current";/g, whereToOpenLink_code));
}
})();
Alles anzeigen
Moin,
habe mir gestern FX 55.0.3 64 bit installiert. Die Scripte von "Zitronella" habe ich so wie gewünscht in die entsprechender Ordner verfrachtet.
Nach Einbringen der Datei "extras_config_menu.uc.js" habe ich in der Menüleiste folgendes Bild:
[Blockierte Grafik: https://www2.pic-upload.de/img/33838274/Extras_config_menu_2.jpg]
Beide Button lassen sich aufrufen - zeigen die gleichen Auswahlmöglichkeiten.
Das Profil ist noch ohne jeglichen Schnickschnack eingerichtet worden.
in die entsprechender Ordner verfrachtet.
Hast du auch die Erweiterung userChrome.js deaktiviert, oder war die noch nicht installiert?
Moin,
das muss wohl eine Gedankenübertragung gewesen sein.
Hatte inzwischen just die Erweiterung userChromejs 2.0 deaktiviert. Die hatte ich auch installiert.
Jetzt komme ich aber ins Grübeln: in allen anderen Profile ist diese Erweiterung aktiv.
Nach dem Deaktivieren im neuen Profil wurde nur ein Button gezeigt - bei Aktivierung wieder "Zwei"
Frage: muss die Erweiterung aktiv oder deaktiviert sein?
muss die Erweiterung aktiv oder deaktiviert sein?
Wenn du die ganzen Einträge ala Zitronella gemacht hattest muss sie deaktiviert sein.
Diesen ganzen Einträge stammen nämlich aus der Erweiterung.
Siehe dazu auch hier:
Re: userChrome.js Scripte für den Fuchs (Diskussion)
Bis einschl. Fx 56 funktioniert die Erweiterung, ab Fx 57 nur noch die Änderungen.
Hallo zusammen,
funktioniert bei Euch dieser Script "extras_config_menu.uc.js" im Firefox 57?
Gruß
EDV-Oldi
Ja
Teste bitte mal:
// ==UserScript==
// @name extras_config_menu.uc.js
// @compatibility Firefox 8.*, 9.*, 10.*, 11.*, 12.*, 13.*, 14.*, 15.*, 16.*, 17.*
// @include main
// @version 1.0.20121213
// ==/UserScript==
var uProfMenu = {
// Beginn der Konfiguration
// In der folgenden Zeile (11) den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
TextOpenExe : 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
// Falls gewuenscht, in Zeile 15 einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
// vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
// vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
vFileManager: '',
// In der folgenden Zeile (19) 'menu' eintragen, damit es unter "Extras" als Menue erscheint, sonst die id des gewuenschten
// Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
// Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
warpmenuto: 'helpMenu',
// Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
sortScripts: 0, // 1 zum Erzwingen der Sortierung
// Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
gmOrdner: 1,
// Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
cssOrdner: 0,
// In Zeile 30 gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen.
// - Zum Ausblenden: abouts: [],
// - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
// abouts: ['0','about:about','about:addons','about:cache','about:config','about:support'],
abouts: ['about:about','about:addons','about:cache','about:config','about:crashes','about:memory','about:plugins','about:support'],
// Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
showNormalPrefs: 0,
// Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
enableScriptsToClip: 0,
// Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
enableRestart: 0,
// Ende der Konfiguration
init: function() {
if (this.warpmenuto.toLowerCase() == 'menu') {
// aufgrund des gewaehlten warpmenuto als Untermenue von Extras anlegen
var zielmenu = document.getElementById('menu_ToolsPopup');
if (zielmenu==null) {
userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
"geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
"von 'zielmenu' kontrollieren.");
return;
}
var menu = zielmenu.appendChild(this.createME("menu","Config Men\u00FC",0,0,"ExtraConfigMenu"));
menu.setAttribute("class","menu-iconic");
menu.setAttribute("ondblclick","getBrowser (). selectedTab = getBrowser (). addTab ('about:config');");
} else {
// als Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt)
var zielmenu = document.getElementById(this.warpmenuto);
if (zielmenu==null) {
userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
"geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
"von 'warpmenuto' kontrollieren.");
return;
}
var menu = zielmenu.parentNode.insertBefore(document.createElement('toolbarbutton'), zielmenu.nextSibling);
menu.setAttribute("id", "ExtraConfigMenu-button");
menu.setAttribute("class", "toolbarbutton-1");
menu.setAttribute("type", "menu");
menu.setAttribute("tooltiptext", "");
menu.setAttribute("onclick","if (event.button === 1 && !this.open) {getBrowser (). selectedTab = getBrowser (). addTab ('about:config')};");
}
//ab hier ist alles gleich, egal ob Button oder Menue
var css = " \
#ExtraConfigMenu, #ExtraConfigMenu-button { \
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=) !important; \
} \
#ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
display: none !important; \
}";
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET);
menu.setAttribute("onpopupshowing","uProfMenu.getScripts(0)");
var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
// Einbindung von Ordnern
menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","UserScriptLoader","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","CSS","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSS');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","CSSWeb","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0);
switch (this.gmOrdner) {
case 1:
menupopup.appendChild(this.createME("menuitem","GM Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
break;
case 2:
menupopup.appendChild(this.createME("menuitem","USL Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
break;
case 3:
menupopup.appendChild(this.createME("menuitem","Scriptish Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
break;
}
if (this.cssOrdner) {
menupopup.appendChild(this.createME("menuitem","CSS-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSS');","uProfMenu_folder"),0);
}
// Ende Einbindung von Ordnern
// Einbindung von Konfigdateien
menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(0,'userChrome.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(0,'userContent.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0);
menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(0,'userChrome.js');","uProfMenu_edit",0));
// Ende Einbindung von Konfigdateien
// Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter)
var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items"));
var submenu=menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items"));
if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
// Ende Anlegen von Untermenues fuer die userChromeJS-Skripte
// Einbindung von abouts
if (this.abouts.length>0) {
// falls der erste Eintrag des arrays ='0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden
if (this.abouts[0]=='0') {
for (var i = 1; i < this.abouts.length; i++) {
menupopup.appendChild(this.createME("menuitem",this.abouts[i],"getBrowser (). selectedTab = getBrowser (). addTab ('"+this.abouts[i]+"')","uProfMenu_about"),0);
}
} else {
// der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten
var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items"));
this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1);
}
}
// Ende Einbindung von abouts
// Separator, falls dieser nicht schon durch abouts generiert wurde und weitere Menuepunkte folgen werden
if (this.abouts.length==0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) menupopup.appendChild(document.createElement('menuseparator'));
// Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen
if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0);
// Falls addRestartButton installiert ist, Neustart zur Verfuegung stellen (addRestartButton 1.0.20120105mod erforderlich)
if(typeof(ToolRstartMod) != "undefined" || this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
"try{ToolRstartMod.SaveRestart(event,1);} catch(e){alert(e);}","uProfMenu_restart"),0);
},
getDirSep:function() {
// Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln
var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
var dirsep="/";
switch(osString) {
case "WINNT":
dirsep="\\";
break;
case "Linux":
dirsep="/";
break;
case "Darwin":
dirsep="/";
break;
}
return dirsep;
},
edit:function(OpenMode,Filename){
var Path = "";
var dSep = this.getDirSep(); // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen
switch (OpenMode){
//Current is Chrome Directory
case 0:
var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
break;
//Current is Profile Directory
case 1:
var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
break;
//Current is Root
case 2:
var Path = Filename;
break;
}
this.launch(this.TextOpenExe,Path);
},
dirOpen:function(Path){
if (this.vFileManager.length != 0) {
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
var args=[Path];
file.initWithPath(this.vFileManager);
process.init(file);
// Verzeichnis mit anderem Dateimanager oeffnen
process.run(false, args, args.length);
} else {
// Verzeichnis mit Dateimanager des Systems oeffnen
var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
dir.initWithPath(Path);
dir.launch();
}
},
prefDirOpen:function(prefDir){
Path = this.getPrefDirectoryPath(prefDir);
this.dirOpen(Path);
},
getPrefDirectoryPath:function(str){
// get profile directory
var file = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get(str, Components.interfaces.nsIFile);
if (str == 'CurProcD') {
file = file.parent;
};
return file.path;
},
launch:function(RanPath,OpenPath){
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
var args = [OpenPath];
file.initWithPath(RanPath);
// falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
if (!file.exists()) {
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
RanPath=pref.getCharPref("view_source.editor.path");
file.initWithPath(RanPath);
}
proc.init(file);
proc.run(false, args, args.length);
},
stringComparison:function(a, b){
a = a.toLowerCase();
a = a.replace(/ä/g,"a");
a = a.replace(/ö/g,"o");
a = a.replace(/ü/g,"u");
a = a.replace(/ß/g,"s");
b = b.toLowerCase();
b = b.replace(/ä/g,"a");
b = b.replace(/ö/g,"o");
b = b.replace(/ü/g,"u");
b = b.replace(/ß/g,"s");
return(a==b)?0:(a>b)?1:-1;
},
getScripts:function(iType) {
// Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf
let ucJsScripts = [];
let ucXulScripts = [];
// Suchmuster, also die Dateierweiterungen uc.js und uc.xul
let extjs = /\.uc\.js$/i;
let extxul= /\.uc\.xul$/i;
let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
// files mit Eintraegen im Chrome-Ordner befuellen
let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
// Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
while (files.hasMoreElements()) {
let file = files.getNext().QueryInterface(Ci.nsIFile);
// keine gewuenschte Datei, deshalb continue
if (!extjs.test(file.leafName) && !extxul.test(file.leafName)) continue;
// uc.js gefunden -> im Array ablegen
if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
// uc.xul gefunden -> im Array ablegen
if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName);
}
if (this.sortScripts) {
ucJsScripts.sort(this.stringComparison);
ucXulScripts.sort(this.stringComparison);
}
// Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen
if (iType==0) {
this.fillMenu("submenu-ucjs","submenu-ucjs-items", "uc.js",ucJsScripts,"uProfMenu_ucjs",0);
this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0);
} else {
var result=this.fillClipboardValue(ucJsScripts,ucXulScripts);
Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
}
},
fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) {
// Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen
var e = document.getElementById(whichsubmenu);
e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')');
var popup = document.getElementById(whichsubmenuitems);
// zunaechst Untermenue zuruecksetzen
while(popup.hasChildNodes()){
popup.removeChild(popup.firstChild);
}
// Untermenue endlich befuellen
for (var i = scriptArray.length-1; i > -1; i--) {
// bisher nur eine Typunterscheidung (userChromeJS-Skript oder about:)
if (sTyp==0){
var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0);
mitem.setAttribute("onclick","uProfMenu.openAtGithub(event,'"+scriptArray[i]+"')");
mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" \u00F6ffnen,\n Rechtsklick: Suche auf GitHub");
} else {
var mitem = this.createME("menuitem",scriptArray[i],"getBrowser (). selectedTab = getBrowser (). addTab ('"+scriptArray[i]+"')",sClass,0);
}
popup.insertBefore(mitem, popup.firstChild);
}
},
fillClipboardValue:function(sArray,xArray) {
var retValue;
var s = 0;
var x = 0;
s = sArray.length;
x = xArray.length;
switch(this.enableScriptsToClip) {
case 1:
retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+
"\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
break;
default:
retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
for (var i = 0; i < s ; i++) {
j = i + 1;
retValue = retValue + "\n" + j + ". " + sArray[i];
}
retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
if (this.enableScriptsToClip==2) s = 0;
for (var i = 0; i < x ; i++) {
j = i + s + 1;
retValue = retValue + "\n" + j + ". " + xArray[i];
}
break;
}
return retValue;
},
createME:function(sTyp,sLabel,sCommand,sClass,sId) {
// Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
var m = document.createElementNS(XUL_NS, sTyp);
switch (sTyp) {
case "menuitem":
// this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0)
m.setAttribute('label', sLabel);
m.setAttribute('oncommand',sCommand);
m.setAttribute('class',sClass);
break;
case "menu":
// this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues")
m.setAttribute('label', sLabel);
m.setAttribute('id', sId);
break;
case "menupopup":
//this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups");
m.setAttribute('id', sId);
break;
}
return m;
},
openAtGithub:function(e,sScript) {
if (e.button==1){
// Mittelklick - Seite auf GitHub oeffnen (funktionier nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen):
var sUrl="https://github.com/ardiman/userChrome.js/tree/master/"+this.cleanFileName(sScript);
getBrowser (). selectedTab = getBrowser (). addTab (sUrl);
}
if (e.button==2){
// Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist):
e.preventDefault();
var sUrl="https://github.com/search?type=Everything&language=&q="+sScript+"&repo=&langOverride=&start_value=1";
getBrowser (). selectedTab = getBrowser (). addTab (sUrl);
}
},
cleanFileName:function(sName) {
sName=sName.toLowerCase();
/* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen:
/Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/
/ "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen
*/
var regs=[/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/];
for (var i = 0; i < regs.length; i++) {
sName=sName.replace(regs[i],"");
}
return sName;
}
};
uProfMenu.init();
Alles anzeigen
[attachment=0]Screenshot (148).png[/attachment]
Bitte diese Version hier nehmen die ist die ganz aktuelle:
Falscher Link wurde entfernt.
Edit: oben war der falsche Link, bitte diesen hier verwenden:
https://github.com/Endor8/userChr…ras_config_menu
Oben die von Andreas war nur eine Zwischen Version von mir.
Danke!
Nicht vergessen!!
Die vorhandene Version umbenennen um anschließend die eignen im Script
gemachten Einstellungen noch übertragen zu können!!
Mfg.
Endor
Hallo Andreas,
wie immer perfekt.
Ich habe nicht alle Möglichkeiten getestet, aber das was ich brauche funktioniert.
Dann brauche ich auch diesen Script Profilordner.uc.js nicht mehr.
Endor,mit dieser Version bekomme ich aber kein Symbol mehr?
Gruß EDV Oldi