修改firefox的ssh插件的xpi包,hook自已功能

2 篇文章 0 订阅
0 篇文章 0 订阅

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

2 使用winrar打开

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

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

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


修改firefox的ssh插件的xpi包,hook自已功能 - qidizi - qidizi 的博客


像这个插件的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方法图

修改firefox的ssh插件的xpi包,hook自已功能 - qidizi - qidizi 的博客


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


修改firefox的ssh插件的xpi包,hook自已功能 - qidizi - qidizi 的博客



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

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

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

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


修改firefox的ssh插件的xpi包,hook自已功能 - qidizi - qidizi 的博客


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值