FF插件中的桥接JavaScript / Java
Bridge JavaScript/Java in FF plugin
我正在尝试在FF插件(使用jetpack)和java服务器之间实现连接,该服务器将处理来自插件的所有请求。似乎我可以稳定连接,但消息不流动。我没有从插件中得到任何东西。
在这里我发布代码:
JavaScript (client)
const {Cc,Ci} = require("chrome");
exports.main = function() {
try {
// At first, we need a nsISocketTransportService
var transportService =
Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService);
// Try to connect to localhost:2222
var transport = transportService.createTransport(null, 0, "localhost", 2222, null);
var stream = transport.openInputStream(Ci.nsITransport.OPEN_UNBUFFERED,null,null);
var instream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
// Initialize
instream.init(stream);
var outstream = transport.openOutputStream(0, 0, 0);
// Write data
var outputData = "bye";
outstream.write(outputData, outputData.length);
var dataListener = {
data : "", onStartRequest: function(request, context){},
onStopRequest: function(request, context, status){
instream.close();
outstream.close();
listener.finished(this.data);
},
onDataAvailable: function(request, context, inputStream, offset, count) {
this.data += instream.read(count);
console.log(this.data);
},
};
var pump = Cc["@mozilla.org/network/input-stream-pump;1"].createInstance(Ci.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
pump.asyncRead(dataListener, null);
} catch (e){
console.log("Error" + e.result + ": " + e.message);
return e;
} return null;
};
爪哇(服务器)
ServerSocket providerSocket;
Socket connection = null;
ObjectOutputStream out;
ObjectInputStream in;
String message;
GoopirServer(){}
void run() {
try{
// Creating a server socket
providerSocket = new ServerSocket(2222, 10);
// Wait for connection
System.out.println("Waiting for connection");
connection = providerSocket.accept();
System.out.println("Connection received from " + connection.getInetAddress().getHostName());
// Get Input and Output streams
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
in = new ObjectInputStream(connection.getInputStream());
sendMessage("Connection successful");
// The two parts communicate via the input and output streams
do{
try{
message = (String)in.readObject();
System.out.println("client>" + message);
if (message.equals("bye"))
sendMessage("bye");
}
catch(ClassNotFoundException classnot){
System.err.println("Data received in unknown format");
}
}while(!message.equals("bye"));
}
catch(IOException ioException){
ioException.printStackTrace();
}
finally{
// Closing connection
try{
in.close();
out.close();
providerSocket.close();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
}
/*
* Sends a message to the plugin
*/
void sendMessage(String msg)
{
try{
out.writeObject(msg);
out.flush();
System.out.println("server>" + msg);
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
你的 Firefox 端似乎是正确的(除了使用阻塞调用来写入数据),问题出在 Java 端。 ObjectInputStream
和 ObjectOutputStream
用于交换序列化对象(以未记录的格式),而不是字符串。而且我认为ObjectInputStream
希望立即收到神奇的数字,难怪它会在没有输入的情况下锁定。您可能想要使用的是 BufferedReader
和 PrintWriter
.此外,您应该为消息使用一些分隔符,例如换行符(这将允许使用 BufferedReader.readLine()
)。
你能尝试添加: outstream.flush();
紧随其后的是:outstream.write(outputData, outputData.length);
相关文章:
- java.net和javascript之间正则表达式的差异
- 如何使用json将对象列表从java转换为javascript
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- 如何将变量数据从Java类获取到JavaScript
- 将这些正则表达式从javascript转换为Java
- java,javascript签名的小程序(文件选择,ftp上传)安全性/套接字异常
- JavaScript/Java GWT with Rails
- php javascript java applet smart card signing pdf on server
- Javascript:Java类包和类冲突问题
- FF插件中的桥接JavaScript / Java
- Javascript/Java - Webservice returning doubles for date.valu
- 延迟Javascript/Java中函数内的代码执行
- 使用Rhino/JavaScript/Java显示DOS错误消息
- AES JavaScript & Java
- 如何在Android WebView中实现JavaScript-Java通信同步?
- 遍历2D数组(网格)的最佳寻路算法(JavaScript/Java/ c#)
- 获取网页源代码后,网页运行Javascript - Java
- Javascript/Java Servlet之间的响应/请求
- JavaScript, Java, Php或c++密码加密-修改算法