标签页右键复制失效求教

阅读:3707回复:12
2021-08-23 10:00
写私信
楼主#
下面的一段_addmenu.js标签页右键代码失效,在标签页右键可以显示,但是点击后不能实现相应选择,例如“复制当前标签标题”等,请@lonely_8 帮忙看看,怎么修改可以正常使用,万分感谢!!!
浏览器版本91ESR
addMenuPlus.uc.js代码如下:
function convert(str) {
    switch (str) {
        case "%T"            :
            return bw.contentTitle;
        case "%TITLE%"       :
            return bw.contentTitle;
        case "%TITLES%"      :
            return bw.contentTitle.replace(/\s-\s.*/i, "").replace(/_[^\[\]【】]+$/, "");
        case "%U"            :
            return bw.documentURI.spec;
        case "%URL%"         :
            return bw.documentURI.spec;
        case "%H"            :
            return bw.documentURI.spec;
        case "%HOST%"        :
            return bw.documentURI.spec;
        case "%S"            :
            return context.textSelected || "";
        case "%SEL%"         :
            return context.textSelected || "";
        case "%L"            :
            return context.linkURL || "";
        case "%RLINK%"       :
            return context.linkURL || "";
        case "%RLINK_HOST%"  :
            return context.link.host || "";
        case "%RLINK_TEXT%"  :
            return context.linkText() || "";
        case "%RLINK_OR_URL%":
            return context.linkURL || bw.documentURI.spec;
        case "%RLT_OR_UT%"   :
            return context.onLink && context.linkText() || bw.contentTitle;  // 链接文本或网页标题
        case "%IMAGE_ALT%"   :
            return context.target.alt || "";
        case "%IMAGE_TITLE%" :
            return context.target.title || "";
        case "%I"            :
            return context.imageURL || "";
        case "%IMAGE_URL%"   :
            return context.imageURL || "";
        case "%IMAGE_BASE64%":
            return img2base64(context.imageURL);
        case "%M"            :
            return context.mediaURL || "";
        case "%MEDIA_URL%"   :
            return context.mediaURL || "";
        case "%P"            :
            return readFromClipboard() || "";
        case "%CLIPBOARD%"   :
            return readFromClipboard() || "";
        case "%FAVICON%"     :
            return gBrowser.getIcon(tab ? tab : null) || "";
        case "%FAVICON_BASE64%" :
            return img2base64(gBrowser.getIcon(tab ? tab : null));
        case "%EMAIL%"       :
            return getEmailAddress() || "";
        case "%EOL%"         :
            return "\r\n";
    }
    return str;
}
_addmenu.js代码如下:
//标签页右键菜单
new function () {
    var items = [
    {
        label:"复制当前标签标题",
        oncommand: function() {addMenu.copy(addMenu.convertText("%TITLES%"));},
        image:""
    },
    {
        label:"复制当前标签地址",
        oncommand: function() {addMenu.copy(addMenu.convertText("%URL%"));},
        image:""
    },
    {
        label:"复制当前标签标题和地址",
        oncommand: function() {addMenu.copy(addMenu.convertText("%TITLES%\n%URL%"));},
        image:""
    },
{},
    {
        label:"复制所有标签标题",
        oncommand: function() {(function(){
        var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
        var titles = "";
        Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
        titles += tab.label + "\n";
        });
        gClipboardHelper.copyString(titles);   
    })();},
        image:""
    },
    {
        label:"复制所有标签地址",
        oncommand: function() {(function(){
        var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
        var URLs = "";
        Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
        var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
        URLs += url + "\n";
    });
        gClipboardHelper.copyString(URLs); 
    })();},
        image:""
    },
    {
        label:"复制所有标签标题和地址",
        oncommand: function() {(function() {
        var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
        var txt = "";
        Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
        var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
        txt += tab.label + "\n" + url + "\n";
        });
        gClipboardHelper.copyString(txt); 
    })();},
        image:""
    },
    ];
    var menu = TabMenu(
    {
        label:"标签页右键菜单",
        id:"context_TabInfoCopy",onpopupshowing: syncHidden});
        image:"",
        menu(items);
    };
2021-08-23 10:24
写私信
1楼#
我这里是将addMenuPlus.uc.js这个文件的第885、887、889行return后面的的bw替换成gBrowser就可以了,但是缺点就在它只能复制当前页面的标题
function convert(str) {
    switch (str) {
        case "%T"            :
            return gBrowser.contentTitle;
        case "%TITLE%"       :
            return gBrowser.contentTitle;
        case "%TITLES%"      :
            return gBrowser.contentTitle.replace(/\s-\s.*/i, "").replace(/_[^\[\]【】]+$/, "");
2021-08-23 10:49
写私信
2楼#
sakuya:我这里是将addMenuPlus.uc.js这个文件的第885、887、889行return后面的的bw替换成gBrowser就可以了,但是缺点就在它只能复制当前页面的标题
function convert(str) {
    swi...
回到原帖
确实,希望能有解决的办法
2021-08-23 12:49
写私信
3楼#
以前帮人改过,现在还没失效
https://paste.ubuntu.com/p/fF9pnvmvxK/

_addmenu.js 参考
https://www.firefox.net.cn/read-121198
2021-08-23 14:02
写私信
4楼#
lonely_8:以前帮人改过,现在还没失效
https://paste.ubuntu.com/p/fF9pnvmvxK/

_addmenu.js 参考
https://www.firefox.net.cn/read-121198
回到原帖
非常感谢,按照修改后可以正常使用,
2021-08-24 00:42
写私信
5楼#
复制当前标签都能用,但复制所有标签的功能(比如复制所有标签标题、复制所有标签地址、复制所有标签标题和地址等)都不能用。
你们的能用吗?
脚本用的是3楼的代码,配置文件用的是http://controlc.com/44d7a8d2
2021-08-24 10:13
写私信
6楼#
kidzgy:复制当前标签都能用,但复制所有标签的功能(比如复制所有标签标题、复制所有标签地址、复制所有标签标题和地址等)都不能用。
你们的能用吗?
脚本用的是3楼的代码,配置文件用的是http://controlc.com/44d7a8d2
回到原帖
按照3楼的脚本,可以正常使用
2021-08-24 11:25
写私信
7楼#





我重新试了下,用的脚本和配置文件都是3楼的,红线框内的4个功能都没有效果,其他有效果。
2021-08-24 16:04
写私信
8楼#
kidzgy:我重新试了下,用的脚本和配置文件都是3楼的,红线框内的4个功能都没有效果,其他有效果。回到原帖
Array.slice(gBrowser.tabContainer.childNodes)
改为
gBrowser.tabs
2021-08-24 18:39
写私信
9楼#
teruimisu:Array.slice(gBrowser.tabContainer.childNodes)
改为
gBrowser.tabs
回到原帖
原来我潜意识的以为楼主是更正后的代码了,忽略了后面修改的。
2021-08-25 03:55
写私信
10楼#
还是有问题,标签右键是能正常用了,但是在页面空白处右键,菜单倒是不见了。


我从RunningCheese处淘到一脚本,这个脚本倒是不会出现菜单不见的问题,不过却有另外的问题,就是复制标签图标的BASE64或是页面图像的BASE64,都会让FF陷入一个假死状态。正常的关闭火狐,虽然火狐看起来是关了,但是后台还保留着进程,必须用任务管理器结束进程才能重新打开火狐。



它的脚本是这样的:https://pastebin.ubuntu.com/p/Nkwnq4jB4J/

我的配置文件:https://pastebin.ubuntu.com/p/ywvz9sS8jj/


搞最后发现我本身初始的脚本就能正常使用了,就是不用3楼的,也不用RunningCheese的,而是https://pastebin.ubuntu.com/p/hphJJZXBWh/
2021-08-25 09:30
写私信
11楼#
kidzgy:还是有问题,标签右键是能正常用了,但是在页面空白处右键,菜单倒是不见了。


我从RunningCheese处淘到一脚本,这个脚本倒是不会出现菜单不见的问题,不过却有另外的问题,就是复制标签图标的BASE64或是页面图像的BASE64...
回到原帖
3楼的脚本,删除下面的代码就不会有你说的情况
break;
case "popuphiding":
    if (event.target.id == 'contentAreaContextMenu') {
        event.target.querySelectorAll(':scope > .addMenu').forEach(m => {
            m.hidden = true;
        });
    }
我也是瞎比对后发现
2021-08-25 11:10
写私信
12楼#
teruimisu:3楼的脚本,删除下面的代码就不会有你说的情况
    break;
case "popuphiding":
    if (event.target.id == 'contentAreaContextMenu') {
       ...
回到原帖
我这边除了删掉上面的代码,还要再删一行才能生效
menu.hidden = true;