标签:
之所以要写这篇博文,是因为我在平时使用selenium这个组件的时候,关于浏览器tab页管理这个问题让我极为头痛,而且一直也没得到很好的解决。selenium这个组件非常强大,但它的这个浏览器窗口管理机制让它在我心目中直接从100分扣到80。因为这个问题,我今天学习了一下在firefox addon中使用socket监听我的java请求,然后由我自己来调用firefox的tabs api进行tab页的管理。有兴趣的朋友可以看下!
首先要熟悉几个socket相关的核心xpcom组件
有了这几个组件,就可以开始编写一个以 firefox add-on为服务端,java为客户端的简单的socket通信实例,下面是有关这些组件的参考链接
Cc["@mozilla.org/network/server-socket;1"]
.createInstance(Ci.nsiServerSocketListener ) 这种方式去声明它,结果报错了,这个源码里面有一个nsiServerSocketListener的使用实例。实际上就是json对象,只要实现onSocketAccepted和onStopListening方法就可以。
现在就可以在你的火狐add-on main.js里面先创建一个socket服务
const {Cu,Cc,Ci} = require("chrome");
var serverSocket = Cc["@mozilla.org/network/server-socket;1"]
.createInstance(Ci.nsIServerSocket); //创建一个socket服务
serverSocket.init(9638,false,-1); //监听9638端口
这时候运行 cfx run打开浏览器后,如果正常运行的话就能看到9638端口已经被firefox.exe占用

接下来处理socket请求
const nsIServerSocket = Ci.nsIServerSocket;
const nsITransport = Ci.nsITransport;
const nsIScriptableInputStream = Ci.nsIScriptableInputStream;
//创建socket监听器
var listener = {
onSocketAccepted : function(socket, transport) {
//处理收到的数据
var input = transport.openInputStream(nsITransport.OPEN_BLOCKING,0,0);
var sin = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(nsIScriptableInputStream);
sin.init(input);
var resp = "";
do {
resp = sin.read(512);
} while (resp == "");
while (sin.available() > 0)
resp += sin.read(512);
console.log(resp);
},
onStopListening : function(socket, status){
}
}
启动这个监听器
serverSocket.asyncListen(listener);
再写一个java来测试,代码很简单,就新建一个socket请求然后发送一个字符串
try {
Socket socket = new Socket("localhost", 9638);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("dfasdfad".getBytes());
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
最后运行java程序之后,在火狐add-on sdk控制台里面就可以看到

到这里一个简单的ff addon socket程序就写好了,后面可以根据具体的需求做些其它的事情,比如说发送一个字符串 "open_new_tab"然后再带一个url地址给这个add-on,它就会打开一个新的tab页并加载给定的url.
由于小学语文没学好,所以上面的例子各位新人朋友看的可能比较晕,所以最好是先去学习一下最基本的firefox-addon开发再来看这篇文章,不然cfx run是个啥意思都不知道的话看的很困难的
下面是源代码地址:http://yunpan.cn/cQ6scfDD4qSdq (提取码:d400)
标签:
原文地址:http://www.cnblogs.com/dongjak/p/4599748.html