修改firefox的ssh插件的xpi包,hook自已功能
2013-03-28 16:54
169 查看
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安装完后,只是把它移动到这里来,这样,更改就更加方便了.
再看时,发现它的文件名已经变了,
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安装完后,只是把它移动到这里来,这样,更改就更加方便了.
再看时,发现它的文件名已经变了,
相关文章推荐
- jQuery星级评分功能插件(修改适应IE6,IE7, IE8, Firefox, Opera, Chrome, Safari)
- onChange事件,在IE和FireFox,Chrome等不能生效的处理。(一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示(您还可以输入XX字))
- 用HOOK来修改API函数的功能(3)-禁止删除文件 推荐
- 用HOOK来修改API函数的功能(5)-EXE和WDM驱动通信(转)
- 用HOOK来修改API函数的功能(5)-EXE和WDM驱动通信
- SSH 基于ajax实现修改密码功能步骤梳理
- Win7/win8 系统下 Firefox hostadmin插件无法修改Host
- 修改Putty 0.6 代码支持SSH 密码保存功能 .
- Eclipse 插件开发 - 实现外部程序修改文件后刷新功能
- ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
- 用HOOK来修改API函数的功能(1)-注册表
- 用HOOK来修改API函数的功能 @之禁止删除文件
- 让Firefox支持Wap浏览器功能的插件 模拟手机上网功能
- 可增强Firebug功能的十款Firefox插件
- 可增强Firebug功能的十款Firefox插件
- 用HOOK来修改API函数的功能(2)-创建文件
- Firefox XPI插件安装方法
- 用HOOK来修改API函数的功能(3)-禁止删除文件
- 推荐个好用的firefox插件 hostadmin 可以修改hosts
- 用HOOK来修改API函数的功能(4)-环境搭建