teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
阅读:3655回复: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);
    };
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
1楼#
发布于:2021-08-23 10:49
sakuya:我这里是将addMenuPlus.uc.js这个文件的第885、887、889行return后面的的bw替换成gBrowser就可以了,但是缺点就在它只能复制当前页面的标题
function convert(str) {
    swi...
回到原帖
确实,希望能有解决的办法
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
2楼#
发布于:2021-08-23 14:02
lonely_8:以前帮人改过,现在还没失效
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点
  • 社区居民
3楼#
发布于:2021-08-24 10:13
kidzgy:复制当前标签都能用,但复制所有标签的功能(比如复制所有标签标题、复制所有标签地址、复制所有标签标题和地址等)都不能用。
你们的能用吗?
脚本用的是3楼的代码,配置文件用的是http://controlc.com/44d7a8d2
回到原帖
按照3楼的脚本,可以正常使用
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
4楼#
发布于:2021-08-24 16:04
kidzgy:我重新试了下,用的脚本和配置文件都是3楼的,红线框内的4个功能都没有效果,其他有效果。回到原帖
Array.slice(gBrowser.tabContainer.childNodes)
改为
gBrowser.tabs
teruimisu
小狐狸
小狐狸
  • UID57823
  • 注册日期2020-07-02
  • 最后登录2023-08-18
  • 发帖数22
  • 经验34枚
  • 威望0点
  • 贡献值40点
  • 好评度1点
  • 社区居民
5楼#
发布于: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;
        });
    }
我也是瞎比对后发现
游客

返回顶部