|
阅读:2384回复:8
【已解决】【FF72】求修复 【搜索栏滚轮切换搜索引擎.uc】
我是直接从FF60跳到FF67,现在不管用了,这段代码的用处是,搜索栏可以显示当前引擎的图标,并且可以用滑轮切换搜索引擎,求修复,谢谢!
目前72版本,不显示搜索引擎图标,望修复,谢谢! (function() {
//Einstellungen - true = ein(aktiviert) false = aus(deaktiviert)
//Namen und Symbol der Suchmaschine in der Suchleiste anzeigen
const BUTTON_ONLY = false //Nur bei Suchleisten Suchschaltfläche anwenden - Suchmaschinen wechseln mit Scrollrad im Hauptkontextmenü deaktivieren
const label = true; //Namen anzeigen
const img = true; //Symbol - Favicon anzeigen
//Doppelklick auf Suchleiste, um zur Standard Suchmaschine zurück zu kehren
const only = false; //Suchleiste leeren und nicht zur Standardsuchmaschine zurückkehren [Neu in Version 0.6]
const dbl = true; //Funktion aktivieren
const zero = false; //Bei Klick zur obersten Suchmaschine zurückkehren
const select = '百度'; //Standard Suchmaschine angeben, zum Beispiel 'DuckDuckGo'.
const erase = true; //Nach Suche Suchleiste leeren
//[Aktion nach dem Suchen mit der Suchleiste]
const auto = true; //Andere Einstellungen verwenden, durch einen Doppelklick auf die Suchleiste
//Kontextmenü Suche wechseln mit[~~Suchen]
const cxt = true; //Funktion aktivieren
const icon = true; //Symbol - Favicon anzeigen
const clk = true; //Klicken, um zur Standard Suchmaschine zurückzukehren (Andere Einstellungen verwenden ~ mit Doppelklick auf die Suchleiste)
const sync = false; //Suchwort an die Suchleiste senden [Neu in Version 0.7]
const hist = true; //Suchwort der Suchchronik der Suchleiste hinzufügen * Es ist OK, wenn die Synchronisation inkorrekt ist [Neu in Version 0.8]
//[Verhalten beim Start] * Gilt auch beim Neustart
const start0 = false; //Andere Einstellungen verwenden, durch Doppelklick auf die Suchleiste
//Konfiguration
const scrollRight = true;
let bar = document.getElementById('searchbar');
let box = bar.textbox.inputField;
let menu = document.getElementById('context-searchselect');
let BSS = Services.search;
if(!!dbl) bar.addEventListener('dblclick', ResetE, false);
bar.addEventListener('DOMMouseScroll', ChangeE, false);
if(!!cxt) menu.addEventListener('wheel', ChangeE, false);
if(!!clk) menu.addEventListener('click', function(){
if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
if(!!hist) SyncHistory();
setTimeout(function(){ResetE()}, 0)
}, false);
window.addEventListener('unload', function uninit() {
bar.removeEventListener('dblclick', ResetE, false);
bar.removeEventListener('DOMMouseScroll', ChangeE, false);
menu.removeEventListener('wheel', function(e){if(!!con) ChangeE(e)} , false);
menu.removeEventListener('click', function(){
if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
if(!!hist) SyncHistory();
setTimeout(function(){ResetE()}, 0)
} , false);
window.removeEventListener('unload', uninit , false);
}, false);
async function ResetE(){
this.engines = await BSS.getVisibleEngines();
if(!only){
if(!!zero || select == ''){BSS.defaultEngine = this.engines[0]
}else{
BSS.defaultEngine = BSS.getEngineByName(select)
}
}
if(!!erase || !!only) box.value = '';
}
function CMenu() {
let selectedText = menu.searchTerms || window.getSelection().toString();
if (selectedText.length > 15) {
let truncLength = 15;
let truncChar = selectedText[15].charCodeAt(0);
if (truncChar >= 0xDC00 && truncChar <= 0xDFFF)
truncLength++;
selectedText = selectedText.substr(0, truncLength) + '\u2026';
}
var menuLabel = gNavigatorBundle.getFormattedString('contextMenuSearch',[BSS.defaultEngine.name, selectedText]);
menu.setAttribute('label', menuLabel);
if(!icon || !cxt) return;
let style = '@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);#context-searchselect:before{margin:0 -20px 0 5px;content:"";display:inline-block;width:16px;height:16px;background:url('+ BSS.defaultEngine.iconURI.spec +');background-size:contain!important}';
let sspi = document.createProcessingInstruction(
'xml-stylesheet',
'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
);
document.insertBefore(sspi, document.documentElement);
sspi.getAttribute = function(name) {
return document.documentElement.getAttribute(name);
};
}
function SyncHistory(){
let val = menu.searchTerms;
let addHistory = function(val){
setTimeout(function(){bar.FormHistory.update({op: "add", fieldname: "searchbar-history", value: val})}, 500);
};
let removeHistory = function(callback, val){
bar.FormHistory.update({op: "remove", fieldname: "searchbar-history", value: val});
callback(val);
}
removeHistory(addHistory, val);
}
async function ChangeE(event) {
if(BUTTON_ONLY && event.originalTarget.className !== 'searchbar-search-button' && event.originalTarget !== menu) return;
let dir = (scrollRight ? 1 : -1) * Math.sign(event.detail || event.deltaY);
this.engines = await BSS.getVisibleEngines();
let index = this.engines.findIndex(e => e.name === BSS.defaultEngine.name);
this.engines[this.engines.length] = this.engines[0]
if(index+dir < 0 || index+dir === this.engines.length - 1) return;
BSS.defaultEngine = this.engines[index+dir];
}
function ShowCurrentE(){
let E = BSS.defaultEngine;
if(!!label)box.setAttribute('placeholder', E.name);
let icon = bar.querySelector('.searchbar-search-icon');
if(!!img)icon.setAttribute('style', "list-style-image: url('"+ E.iconURI.spec +"') !important; -moz-image-region: auto !important; width: 16px !important; padding: 2px 0 !important;");
}
Services.obs.addObserver(observe, "browser-search-engine-modified");
window.addEventListener("unload", () => {
Services.obs.removeObserver(observe, "browser-search-engine-modified");
});
Services.obs.addObserver(ob2, "browser-search-service");
window.addEventListener("unload", () => {
Services.obs.removeObserver(ob2, "browser-search-service");
});
function observe(aEngine, aTopic, aVerb) {
if (aTopic == "browser-search-engine-modified") {
aEngine.QueryInterface(Components.interfaces.nsISearchEngine);
if(aVerb !== "engine-current" && aVerb !== 'engine-default') return;
ShowCurrentE();
CMenu();
}
}
function ob2(aSubject, aTopic, aData) {
if(aData === "init-complete" && aTopic === "browser-search-service") {
if(!!start0) ResetE();
ShowCurrentE();
CMenu();
}
}
if(!auto) return;
bar.cmd = bar.doSearch;
bar.doSearch = function(aData, aWhere, aEngine) {
this.cmd(aData, aWhere, aEngine);
ResetE()
}
ShowCurrentE();
})() |
|
|
1楼#
发布于:2019-05-25 12:50
(function() {
//Einstellungen - true = ein(aktiviert) false = aus(deaktiviert)
//Namen und Symbol der Suchmaschine in der Suchleiste anzeigen
const BUTTON_ONLY = false //Nur bei Suchleisten Suchschaltfläche anwenden - Suchmaschinen wechseln mit Scrollrad im Hauptkontextmenü deaktivieren
const label = true; //Namen anzeigen
const img = true; //Symbol - Favicon anzeigen
//Doppelklick auf Suchleiste, um zur Standard Suchmaschine zurück zu kehren
const only = false; //Suchleiste leeren und nicht zur Standardsuchmaschine zurückkehren [Neu in Version 0.6]
const dbl = true; //Funktion aktivieren
const zero = false; //Bei Klick zur obersten Suchmaschine zurückkehren
const select = '百度'; //Standard Suchmaschine angeben, zum Beispiel 'DuckDuckGo'.
const erase = true; //Nach Suche Suchleiste leeren
//[Aktion nach dem Suchen mit der Suchleiste]
const auto = true; //Andere Einstellungen verwenden, durch einen Doppelklick auf die Suchleiste
//Kontextmenü Suche wechseln mit[~~Suchen]
const cxt = true; //Funktion aktivieren
const icon = true; //Symbol - Favicon anzeigen
const clk = true; //Klicken, um zur Standard Suchmaschine zurückzukehren (Andere Einstellungen verwenden ~ mit Doppelklick auf die Suchleiste)
const sync = false; //Suchwort an die Suchleiste senden [Neu in Version 0.7]
const hist = true; //Suchwort der Suchchronik der Suchleiste hinzufügen * Es ist OK, wenn die Synchronisation inkorrekt ist [Neu in Version 0.8]
//[Verhalten beim Start] * Gilt auch beim Neustart
const start0 = false; //Andere Einstellungen verwenden, durch Doppelklick auf die Suchleiste
//Konfiguration
const scrollRight = true;
let bar = document.getElementById('searchbar');
let box = bar.textbox.inputField;
let menu = document.getElementById('context-searchselect');
let BSS = Services.search;
if(!!dbl) bar.addEventListener('dblclick', ResetE, false);
bar.addEventListener('DOMMouseScroll', ChangeE, false);
if(!!cxt) menu.addEventListener('wheel', ChangeE, false);
if(!!clk) menu.addEventListener('click', function(){
if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
if(!!hist) SyncHistory();
setTimeout(function(){ResetE()}, 0)
}, false);
window.addEventListener('unload', function uninit() {
bar.removeEventListener('dblclick', ResetE, false);
bar.removeEventListener('DOMMouseScroll', ChangeE, false);
menu.removeEventListener('wheel', function(e){if(!!con) ChangeE(e)} , false);
menu.removeEventListener('click', function(){
if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
if(!!hist) SyncHistory();
setTimeout(function(){ResetE()}, 0)
} , false);
window.removeEventListener('unload', uninit , false);
}, false);
async function ResetE(){
this.engines = await BSS.getVisibleEngines();
if(!only){
if(!!zero || select == ''){BSS.defaultEngine = this.engines[0]
}else{
BSS.defaultEngine = BSS.getEngineByName(select)
}
}
if(!!erase || !!only) box.value = '';
}
function CMenu() {
let selectedText = menu.searchTerms || window.getSelection().toString();
if (selectedText.length > 15) {
let truncLength = 15;
let truncChar = selectedText[15].charCodeAt(0);
if (truncChar >= 0xDC00 && truncChar <= 0xDFFF)
truncLength++;
selectedText = selectedText.substr(0, truncLength) + '\u2026';
}
var menuLabel = gNavigatorBundle.getFormattedString('contextMenuSearch',[BSS.defaultEngine.name, selectedText]);
menu.setAttribute('label', menuLabel);
if(!icon || !cxt) return;
let style = '@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);#context-searchselect:before{margin:0 -20px 0 5px;content:"";display:inline-block;width:16px;height:16px;background:url('+ BSS.defaultEngine.iconURI.spec +');background-size:contain!important}';
let sspi = document.createProcessingInstruction(
'xml-stylesheet',
'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
);
document.insertBefore(sspi, document.documentElement);
sspi.getAttribute = function(name) {
return document.documentElement.getAttribute(name);
};
}
function SyncHistory(){
let val = menu.searchTerms;
let addHistory = function(val){
setTimeout(function(){bar.FormHistory.update({op: "add", fieldname: "searchbar-history", value: val})}, 500);
};
let removeHistory = function(callback, val){
bar.FormHistory.update({op: "remove", fieldname: "searchbar-history", value: val});
callback(val);
}
removeHistory(addHistory, val);
}
async function ChangeE(event) {
if(BUTTON_ONLY && event.originalTarget.className !== 'searchbar-search-button' && event.originalTarget !== menu) return;
let dir = (scrollRight ? 1 : -1) * Math.sign(event.detail || event.deltaY);
this.engines = await BSS.getVisibleEngines();
let index = this.engines.findIndex(e => e.name === BSS.defaultEngine.name);
this.engines[this.engines.length] = this.engines[0]
if(index+dir < 0) return;
BSS.defaultEngine = this.engines[index+dir];
}
function ShowCurrentE(){
let E = BSS.defaultEngine;
if(!!label)box.setAttribute('placeholder', E.name);
let icon = bar.querySelector('.searchbar-search-icon');
if(!!img)icon.setAttribute('style', "list-style-image: url('"+ E.iconURI.spec +"') !important; -moz-image-region: auto !important; width: 16px !important; padding: 2px 0 !important;");
}
Services.obs.addObserver(observe, "browser-search-engine-modified");
window.addEventListener("unload", () => {
Services.obs.removeObserver(observe, "browser-search-engine-modified");
});
Services.obs.addObserver(ob2, "browser-search-service");
window.addEventListener("unload", () => {
Services.obs.removeObserver(ob2, "browser-search-service");
});
function observe(aEngine, aTopic, aVerb) {
if (aTopic == "browser-search-engine-modified") {
aEngine.QueryInterface(Components.interfaces.nsISearchEngine);
if(aVerb !== "engine-current" && aVerb !== 'engine-default') return;
ShowCurrentE();
CMenu();
}
}
function ob2(aSubject, aTopic, aData) {
if(aData === "init-complete" && aTopic === "browser-search-service") {
if(!!start0) ResetE();
ShowCurrentE();
CMenu();
}
}
if(!auto) return;
bar.cmd = bar.doSearch;
bar.doSearch = function(aData, aWhere, aEngine) {
this.cmd(aData, aWhere, aEngine);
ResetE()
}
ShowCurrentE();
})() |
|
|
2楼#
发布于:2019-05-25 14:37
|
|
|
3楼#
发布于:2019-05-30 17:01
|
|
|
4楼#
发布于:2019-05-30 18:48
//106行的
if(index+dir < 0) return;
//改成
if(index+dir < 0 || index+dir === this.engines.length - 1) return; |
|
|
5楼#
发布于:2019-05-30 20:37
|
|
|
6楼#
发布于:2020-01-11 21:26
|
|
|
7楼#
发布于:2020-01-11 21:44
删掉【.inputField】(不含【】)
|
|
|
8楼#
发布于:2020-01-11 22:41
|
|
太叼了!!管用!我只能说卧槽牛逼!太感谢了!