|
阅读:827回复:0
uc脚本微调求助
各位大神,这个脚本我改造了一下用来中键后台打开书签栏书签。现在希望中键点击后书签菜单能关闭,不知道该怎么改,恳请大神出手,万分感谢!
// ==UserScript==
// @name newTabByLongPress.uc.js
// @description Lesezeichen mit länger gedrückter Linken Maustaste in neuem Tab öffnen
// @include main
// @version 0.8.4 Nur bei Lesezeichen ändern
// @version 0.8.3 Link-Korrekturen
// @version 0.8.2 Für Links aber nicht von Bildern
// @version 0.8.1 Timer-Korrektur
// ==/UserScript==
(function () {
'use strict';
const WAIT = 1; // Zeitspanne die die Maustaste gedrückt werden muss, in Millisekunden;长按为250
const IN_BACKGROUND = true; // Tab im Hintergrund öffnen
const RELATED_TO_CURRENT = true; // Link oder Lesezeichen direkt neben dem aktuellen Tab öffnen?
var timeoutID;
var longPress = false;
function handleLongPress (e) {
if (timeoutID) {
clearTimeout(timeoutID);
timeoutID = null;
}
if (e.button !== 1) return;
if (e.altKey || e.ctrlKey || e.shiftKey) return;
var node = e.target || e.originalTarget;
if (!node) return;
var url = getPlacesURI(e, node);
if (!url) return;
if (e.type === 'mousedown') {
timeoutID = setTimeout(function () {
addEventListener('click', function clk(e) {
removeEventListener('click', clk, true);
e.preventDefault();
e.stopPropagation();
}, true);
gBrowser.loadOneTab(url, {
relatedToCurrent: RELATED_TO_CURRENT,
inBackground: IN_BACKGROUND,
referrerURI: makeURI(gBrowser.currentURI.spec),
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
});
longPress = true;
}, WAIT);
} else {
clearTimeout(timeoutID);
if (longPress && e.type === 'mouseup') {
e.preventDefault();
longPress = false;
}
}
}
function getPlacesURI (e, node) {
if (!node || !node.localName)
return;
var lnlc = node.localName.toLowerCase();
if (node._placesNode && PlacesUtils.nodeIsURI(node._placesNode)
|| (lnlc === 'treechildren' && (isBookmarkTree(node.parentNode)
|| isHistoryTree(node.parentNode)))) {
return (lnlc === 'treechildren') ? getTreeInfo(e, 'uri') : node._placesNode.uri;
}
}
function getTreeInfo (e, prop) {
if (!('PlacesUtils' in window))
return '';
var tree = (e.target || e.originalTarget).parentNode;
tree = tree.wrappedJSObject || tree;
var row = {}, col = {}, obj = {};
var tbo = tree.treeBoxObject;
tbo.getCellAt(e.clientX, e.clientY, row, col, obj);
if (row.value === -1)
return '';
try {
var node = tree.view.nodeForTreeIndex(row.value);
} catch(ex) {}
if (!node || !PlacesUtils.nodeIsURI(node))
return '';
return node[prop];
}
function isBookmarkTree(tree) {
return isPlacesTree(tree)
&& /[:&]folder=/.test(tree.getAttribute("place"));
}
function isHistoryTree(tree) {
if(!isPlacesTree(tree))
return false;
var place = tree.getAttribute("place");
return !/[:&]folder=/.test(place)
&& !/[:&]transition=7(?:&|$)/.test(place);
}
function isPlacesTree(tree) {
return tree.getAttribute("type") === "places";
}
['mousedown', 'mouseup', 'dragstart'].forEach(function (type) {
addEventListener(type, handleLongPress, true);
});
}()); |
|