teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
阅读:3593回复: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);
    };
sakuya
小狐狸
小狐狸
  • UID56896
  • 注册日期2019-02-21
  • 最后登录2022-08-12
  • 发帖数17
  • 经验19枚
  • 威望0点
  • 贡献值8点
  • 好评度3点
  • 社区居民
  • 忠实会员
1楼#
发布于:2021-08-23 10:24
我这里是将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(/_[^\[\]【】]+$/, "");
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
2楼#
发布于:2021-08-23 10:49
sakuya:我这里是将addMenuPlus.uc.js这个文件的第885、887、889行return后面的的bw替换成gBrowser就可以了,但是缺点就在它只能复制当前页面的标题
function convert(str) {
    swi...
回到原帖
确实,希望能有解决的办法
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
3楼#
发布于:2021-08-23 12:49
以前帮人改过,现在还没失效
https://paste.ubuntu.com/p/fF9pnvmvxK/

_addmenu.js 参考
https://www.firefox.net.cn/read-121198
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
4楼#
发布于:2021-08-23 14:02
lonely_8:以前帮人改过,现在还没失效
https://paste.ubuntu.com/p/fF9pnvmvxK/

_addmenu.js 参考
https://www.firefox.net.cn/read-121198
回到原帖
非常感谢,按照修改后可以正常使用,
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
5楼#
发布于:2021-08-24 00:42
复制当前标签都能用,但复制所有标签的功能(比如复制所有标签标题、复制所有标签地址、复制所有标签标题和地址等)都不能用。
你们的能用吗?
脚本用的是3楼的代码,配置文件用的是http://controlc.com/44d7a8d2
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
6楼#
发布于:2021-08-24 10:13
kidzgy:复制当前标签都能用,但复制所有标签的功能(比如复制所有标签标题、复制所有标签地址、复制所有标签标题和地址等)都不能用。
你们的能用吗?
脚本用的是3楼的代码,配置文件用的是http://controlc.com/44d7a8d2
回到原帖
按照3楼的脚本,可以正常使用
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
7楼#
发布于:2021-08-24 11:25





我重新试了下,用的脚本和配置文件都是3楼的,红线框内的4个功能都没有效果,其他有效果。
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
8楼#
发布于:2021-08-24 16:04
kidzgy:我重新试了下,用的脚本和配置文件都是3楼的,红线框内的4个功能都没有效果,其他有效果。回到原帖
Array.slice(gBrowser.tabContainer.childNodes)
改为
gBrowser.tabs
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
9楼#
发布于:2021-08-24 18:39
teruimisu:Array.slice(gBrowser.tabContainer.childNodes)
改为
gBrowser.tabs
回到原帖
原来我潜意识的以为楼主是更正后的代码了,忽略了后面修改的。
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
10楼#
发布于:2021-08-25 03:55
还是有问题,标签右键是能正常用了,但是在页面空白处右键,菜单倒是不见了。


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



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

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


搞最后发现我本身初始的脚本就能正常使用了,就是不用3楼的,也不用RunningCheese的,而是https://pastebin.ubuntu.com/p/hphJJZXBWh/
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
11楼#
发布于:2021-08-25 09:30
kidzgy:还是有问题,标签右键是能正常用了,但是在页面空白处右键,菜单倒是不见了。


我从RunningCheese处淘到一脚本,这个脚本倒是不会出现菜单不见的问题,不过却有另外的问题,就是复制标签图标的BASE64或是页面图像的BASE64...
回到原帖
3楼的脚本,删除下面的代码就不会有你说的情况
break;
case "popuphiding":
    if (event.target.id == 'contentAreaContextMenu') {
        event.target.querySelectorAll(':scope > .addMenu').forEach(m => {
            m.hidden = true;
        });
    }
我也是瞎比对后发现
sakuya
小狐狸
小狐狸
  • UID56896
  • 注册日期2019-02-21
  • 最后登录2022-08-12
  • 发帖数17
  • 经验19枚
  • 威望0点
  • 贡献值8点
  • 好评度3点
  • 社区居民
  • 忠实会员
12楼#
发布于:2021-08-25 11:10
teruimisu:3楼的脚本,删除下面的代码就不会有你说的情况
    break;
case "popuphiding":
    if (event.target.id == 'contentAreaContextMenu') {
       ...
回到原帖
我这边除了删掉上面的代码,还要再删一行才能生效
menu.hidden = true;
游客

返回顶部