1 直接到官方下载最新的xpi

2 使用winrar打开

3 使用记事本修改代码即可,保存后,提示更新到xpi,是即可,

4 很多文件放在一个jar文件中,其实它也是一个zip文件,直接使用winrar打开修改即可

下面是汉化图,但是可能没必要,因为到时想升级,汉化了又浪费表情

像这个插件的clear指令个人认为并不太好用,可以通过此方法也修改达到,比较,在右键菜单中添加一个清空项来达到真正的clear掉div,而不是滚动上去.

还有可以添加登录成功后自动运行的命令,如sudo su

或是设置环境之类

修改时注意保存时的编码是utf8,与换行符

可以通过挂载一个自己的js来进行处理,如果没必要修改对方的代码 的功能

简单的清空历史,比较在看比较长的东西,不想让前面的信息加进来,就需要清空,但是这个插件的设计原理并不是这样,会尽量保持记录的.大概代码是

可以放到自己的js中即可

gCli.historyCache=[]

gCli.onTerminalReset();
gCli.historyOuter.style.height = '0px';
gCli.updateScreen(1,1);

-------自己功能代码文件qidizi.js------------

(function() {
    var site = {};
    var shellInput = function(str) {//模仿shell输入命令,注意执行是回车符
        gConnection.output(unescape(encodeURIComponent(str)));
    }
    
    var addMenu = function () {//重新绑定右键事件
        gCli.body.removeEventListener('mousedown', gCli.mousedown.bind(gCli), false);//解绑
        
        var myMenu = function(ul) {
            //增加清空项
            var li = this.doc.createElement('LI');
            li.textContent = '清屏';
            li.onclick = function(event) {
                if (event) {
                    event.preventDefault();
                }
                
                closeMenu();
                gCli.historyCache = [];
                gCli.newHistoryLines = 0;
                gCli.Clear();//设置屏幕缓存成空白
                gCli.onTerminalReset();//清空history和termanl子对象
                gCli.historyOuter.style.height = '0px';//设置history高度正常
                gCli.curY = 0;//把输入定位到顶部
                gCli.updateScreen(1,1);//更新屏幕
                shellInput('\n');//输入空格式,显示命令行标
            };
            ul.appendChild(li);
            
            //增加输入密码项
            var li = this.doc.createElement('LI');
            li.textContent = '插入账户密码';
            li.onclick = function(event) {
                if (event) {
                    event.preventDefault();
                }
                
                closeMenu();
                shellInput(site.password+ '\n');
            };
            ul.appendChild(li);
            
            //增加项
            var li = this.doc.createElement('LI');
            li.textContent = '关于登录后自动执行命令';
            li.onclick = function(event) {
                if (event) {
                    event.preventDefault();
                }
                
                closeMenu();
                alert(
                    '如果需要在每次登录成功后都自动执行某些指令请,请按下面提示填写指令即可达成\n'
                    + '\n 1 在建立连接账户的高级面板里的说明输入框中像下面示例放置指令即可自动执行 \n'
                    + '\n 说明框中其它内容...\n'
                    + '\n 说明框中其它内容...\n'
                    + '\n 说明框中更多内容,省略n万行例子...\n'
                    + '\n'
                    + '\n  \n'
                    + '\n >sh.init \n'
                    + '\n echo "这个是命令一,上面那行是必须的,且格式是固定的,二头可以空格,但字间禁止,区别大小写,结束句格式要求也相同,表示命令开始" \n'
                    + '\n echo "这个是命令二" \n'
                    + '\n LANG=en_US.UTF-8 \n'
                    + '\n echo "这个是最后一行命令,后面那行也是必须的,表示命令行部分结束" \n'
                    + '\n >sh.init \n'
                    + '\n 说明框其它任意内容,省略n行...\n'
                    
                );
            };
            ul.appendChild(li);
        }
        
        var code = 'this.body.appendChild';//原有代码挂载关键行
        var newFun = gCli.mousedown.toString().replace(code, '\n\n (' +myMenu.toString()+ ')(ul); \n' +code);//插入代码
        
        try {
            eval('gCli.mousedown = ' +newFun+ ';');//生效
            gCli.body.addEventListener('mousedown', gCli.mousedown.bind(gCli), false);//重绑
        } catch (e) { alert('替换右键菜单出错:' + e)}
    }
    
    var shInit = function () {//登录后指令        
        site = gAccountDialog.gSite;
        var initCmd = />sh\.init\s+([\s\S]+)\s+>sh\.init/.exec(site.notes);
        
        if (initCmd) {//如果填写了说明就当做命令来运行
            shellInput(initCmd[1] + '\n');
        }
    }
    
    var myOnloader = setInterval(function(){//不占用onload,使用定时比较保险
        if ( ('undefined' != typeof gAccountDialog) && ('undefined' != typeof gConnection) && gConnection.isReady ) {//已经实例,且连接命令行输入状态已经准备好
            clearInterval(myOnloader);
            myOnloader = null;
            addMenu();
            shInit();
        }
    }, 500);
})();

------------------------------

hook后使用示意图.

这样就方便很多了,一直是我想要的功能.

hook方法图

重新安装后使用图,如此修改,更新时也能方便就加一个文件和改一句话就ok

再次修改时发现插件文件包并没有解压什么,只是完整的放到下图中,每个配置目录不同的.同时,firefox在运行中,这个xpi是被加载的,

所以,无法更改,需要关掉firefox后才能更改,所以,可以多次更改这个xpi,无需重装,它会在firfox打开时,加载进来的,

也是firefox安装完后,只是把它移动到这里来,这样,更改就更加方便了.

再看时,发现它的文件名已经变了,

修改firefox的ssh插件的xpi包,hook自已功能相关推荐

  1. 火狐linux版更改语言,修改Firefox火狐语言 添加火狐语言包的方法

    有时候我们使用测试版,或者类似于水狐等修改版的时候,默认是英语,用惯了中文,我们使用起来会有一些不习惯,不过我们可以手动安装语言包,将语言变更为中文 下面以水狐为例 1.首先是下载语言包,我们使用的是 ...

  2. rhel6编译ssh的src.rpm包并修改spec参数

    安全扫描要求屏蔽ssh版本信息,也就是说在你ssh -V的时候,不能够显示ssh的版本信息,我之后在网上查找了一些资料,都说需要使用tar包安装ssh,并在解压之后修改sshd.c文件,将versio ...

  3. firefox浏览器常用插件的功能和作用

    启动firefox浏览器及Hackbar插件 在kali上启动firefox浏览器 按下f12键启动Hackbar Load 功能·:将浏览器地址栏中的URL加载到Hackbar的输入框中 Execu ...

  4. Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充)

    Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充) 本文是对上一节的补充:http://www.cnblogs.com/puresoul/p/4 ...

  5. Linux编译mybatis,使用mybatis assembly插件打成tar包,在linux系统中运行服务-Go语言中文社区...

    使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...

  6. 解决jenkins 使用ssh插件执行脚本,导致一直处于构建中无法停止

    一.现象 jenkins中使用了ssh插件,远程登录服务器并执行脚本 脚本如下: #!/bin/bash pid=`ps -ef | grep python | awk '{print $2}'` k ...

  7. linux 谷歌浏览器设置代理_linux下chrome+Proxy Switchy+ssh和firefox+autoproxy+ssh | 学步园...

    继之前firefox+autoproxy+tor+privoxy失效之后,找到了更简单更快速的ssh代理方法:chrome+Proxy Switchy+ssh和firefox+autoproxy+ss ...

  8. Mozilla Firefox,去广告插件

    先安装火狐浏览器,在双击下面链接,安装去广告插件. Adblock Plus 1.3.2: Firefox 无法将文件安装至 https://addons.mozilla.org/firefox/do ...

  9. Firefox推荐安装插件

    Firefox推荐安装以下插件: 必装插件: IE Tab :调试网页在IE内核浏览器表现的优秀插件,不管你喜不喜欢,请安装! 强烈推荐安装的插件: Web Developer:其功能之强大,以至于我 ...

  10. 使用vite和Element Plus,实现部署后不修改代码/打包,新增主题/皮肤包

    Web前端界面切换主题/皮肤,是一个常见的需求.如果希望在打包部署后实现皮肤的修改甚至增加皮肤,不需要修改源码或者重新打包,类似于我们常见的皮肤包扩展,又该如何实现呢? 我使用类似上一期多语言包功能中 ...

最新文章

  1. Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
  2. 关于js中namespace命名空间模式
  3. Win7启动Oracle出错
  4. 【DFS】NYOJ-325-zb的生日
  5. linux咋socket编程,linux中socket编程
  6. uniGUI试用笔记(四)
  7. Ubuntu 10.04屏幕录像软件Xvidcap安装及详细配置
  8. python的pip_Python3中安装pip3
  9. 巧用编辑器正则表达式,批量修改删除超链接
  10. macbook pro M1Pro安装java开发环境,jdk和eclipse安装包快速下载方式
  11. python aiml开发文档,带有Python的AIML文件
  12. GPRS网络继电器SAC07GSA评估套件使用心得
  13. 远程桌面控制计算机,如何在局域网中进行远程桌面登入实现远程控制电脑
  14. java openoffic linux_CentOS 下安装 OpenOffice4.0
  15. [4G5G基础学习]:流程 - 4G LTE 核心网的Attach流程
  16. 360全景的原理与展示
  17. 158 Linux中断基础概念
  18. 华为P40系列手机camera特性分析
  19. 用python实现基于自媒体数据的人群聚类分析
  20. JDBC的批量处理语句

热门文章

  1. adobe bridge cs6怎么卸载_Adobe Bridge CS6 使用教程(一)
  2. 【Java】指定【微信】好友自动发送消息
  3. 如何优化多数据集关联报表
  4. Windows/Ubuntu搭建RTMP服务器+OBS推流+VLC拉流
  5. matlab中如何画柱状图,如何在用Matlab画柱状图
  6. 电工结业试卷_电工结业总结
  7. 电工技术(3)—电路的分析方法二
  8. Springboot封装的好的发送post请求的工具类
  9. 微型计算机的始祖:Altair 8800 | Linux 中国
  10. vue 富文本编辑器wangeditor 上传图片