etjim
火狐狸
火狐狸
  • UID30046
  • 注册日期2009-08-12
  • 最后登录2024-10-02
  • 发帖数161
  • 经验224枚
  • 威望0点
  • 贡献值56点
  • 好评度13点
  • 忠实会员
  • 社区居民
阅读:1399回复:5

【已解决】NewTabByLongPress.uc.js在书签侧栏和历史侧栏上失效

楼主#
更多 发布于:2020-03-01 20:17
@lonely_8,你好大神NewTabByLongPress.uc.js这个脚本之前在书签侧栏和历史侧栏上是生效的,不记得从哪个版本火狐开始在书签侧栏和历史侧栏上失效,只记得新版火狐开始几个版本还是有效的,请问要如何修改该脚本?
脚本如下:
// ==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 = 250; // Zeitspanne die die Maustaste gedrückt werden muss, in Millisekunden
    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 !== 0) 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, {
                    triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
                    relatedToCurrent: RELATED_TO_CURRENT,
                    inBackground: IN_BACKGROUND,
                    referrerURI: makeURI(gBrowser.currentURI.spec)
                });
                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);
    });
     
}());
th
th
小狐狸
小狐狸
  • UID57265
  • 注册日期2019-09-04
  • 最后登录2020-08-05
  • 发帖数3
  • 经验4枚
  • 威望0点
  • 贡献值4点
  • 好评度0点
  • 社区居民
1楼#
发布于:2020-03-02 21:33
lonely_8:默认就是点击关闭的呀?回到原帖
呃,我这里不能自动关闭。可能是我的我的问题吧……
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
2楼#
发布于:2020-03-02 19:36
th:大神你好,如果想要书签栏菜单点击后自动关闭该如何修改?谢谢大大回到原帖
默认就是点击关闭的呀?
th
th
小狐狸
小狐狸
  • UID57265
  • 注册日期2019-09-04
  • 最后登录2020-08-05
  • 发帖数3
  • 经验4枚
  • 威望0点
  • 贡献值4点
  • 好评度0点
  • 社区居民
3楼#
发布于:2020-03-02 09:54
lonely_8:// ==UserScript==
// @name                newTabByLongPress.uc.js
// @description         Lesezeichen mit länger gedrü...
回到原帖
大神你好,如果想要书签栏菜单点击后自动关闭该如何修改?谢谢大大
etjim
火狐狸
火狐狸
  • UID30046
  • 注册日期2009-08-12
  • 最后登录2024-10-02
  • 发帖数161
  • 经验224枚
  • 威望0点
  • 贡献值56点
  • 好评度13点
  • 忠实会员
  • 社区居民
4楼#
发布于:2020-03-01 22:16
lonely_8:// ==UserScript==
// @name                newTabByLongPress.uc.js
// @description         Lesezeichen mit länger gedrü...
回到原帖
亲测有效,谢谢大大的帮助^o^
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
5楼#
发布于:2020-03-01 22:03
// ==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 = 250; // Zeitspanne die die Maustaste gedrückt werden muss, in Millisekunden
    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 !== 0) 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, {
                    triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
                    relatedToCurrent: RELATED_TO_CURRENT,
                    inBackground: IN_BACKGROUND,
                    referrerURI: makeURI(gBrowser.currentURI.spec)
                });
                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;
        var cell = tree.getCellAt(e.clientX, e.clientY);
        if (cell.row === -1)
            return '';
        try {
            var node = tree.view.nodeForTreeIndex(cell.row);
        } catch(ex) {}
        if (!node || !PlacesUtils.nodeIsURI(node))
            return '';
        return node[prop];
    }
    
    function isBookmarkTree(tree) {
        return isPlacesTree(tree)
            && tree.id === 'bookmarks-view';
    }
    
    function isHistoryTree(tree) {
        if(!isPlacesTree(tree))
            return false;
        return tree.id === 'historyTree';
    }
    
    function isPlacesTree(tree) {
        return tree.getAttribute("is") === 'places-tree';
    }
    
    ['mousedown', 'mouseup', 'dragstart'].forEach(function (type) {
        addEventListener(type, handleLongPress, true);
    });
    
}());
游客

返回顶部