JSObject-JavaScript数组是否作为Java数组传递?
我正在尝试将一个复杂的Java小程序转换为JavaScript。小程序在TCP套接字上进行通信时发挥了各种神奇的作用,我需要用JavaScript进行模拟。TCP魔术本身非常复杂,所以我宁愿以后再做,先让小程序的图形部分工作。TCP套接字上的通信告诉小程序要绘制什么,因此根据套接字上的数据,小程序将读取/写入不同的值 我目前的攻击计划是:JSObject-JavaScript数组是否作为Java数组传递?,java,javascript,casting,Java,Javascript,Casting,我正在尝试将一个复杂的Java小程序转换为JavaScript。小程序在TCP套接字上进行通信时发挥了各种神奇的作用,我需要用JavaScript进行模拟。TCP魔术本身非常复杂,所以我宁愿以后再做,先让小程序的图形部分工作。TCP套接字上的通信告诉小程序要绘制什么,因此根据套接字上的数据,小程序将读取/写入不同的值 我目前的攻击计划是: 根据请求类型,将请求头作为参数(工作)以及所需数据从套接字传递给JavaScript 解析JS中发送的头参数/数据,并相应地创建对象 使用要写入TCP套接字
- 根据请求类型,将请求头作为参数(工作)以及所需数据从套接字传递给JavaScript
- 解析JS中发送的头参数/数据,并相应地创建对象
- 使用要写入TCP套接字的字节数组返回调用Java函数的值
function someFunction (blah, cool) {
return [5, 7, 12, 2];
}
注:
复杂的Java小程序是多线程的,因此只需调用小程序中的某些函数是非常重要的。刚刚编写了一个示例来检查=) Test.java:
import java.applet.Applet;
import java.awt.*;
import netscape.javascript.JSObject;
public class Test extends Applet {
public void init() {
JSObject window = JSObject.getWindow(this); // this=applet
String[] params = {"blah", "cool"};
Object ret = window.call("testfunc", params);
if (ret instanceof JSObject){
JSObject jsret = (JSObject)ret;
Object len = jsret.getMember("length");
String val = "";
if (len instanceof Number){
val = "array: ";
int n = ((Number)len).intValue();
for (int i = 0; i < n; ++i){
val += jsret.getSlot(i).toString() + " ";
}
} else{
val = "no array: " + ret.toString();
}
String[] params2 = {val};
window.call("alert", params2);
} else{
String[] params2 = {ret.toString()};
window.call("alert", params2);
}
}
}
import java.applet.applet;
导入java.awt.*;
导入netscape.javascript.JSObject;
公共类测试扩展Applet{
公共void init(){
JSObject window=JSObject.getWindow(this);//this=applet
字符串[]params={“blah”,“cool”};
Object ret=window.call(“testfunc”,params);
if(JSObject的ret instanceof){
JSObject jsret=(JSObject)ret;
对象len=jsret.getMember(“长度”);
字符串val=”“;
if(len instanceof Number){
val=“数组:”;
intn=((数字)len.intValue();
对于(int i=0;i
Test.html:
<html>
<head>
<title> Test </title>
<script language="JavaScript">
function testfunc(a, b){
return [1, 2];
}
</script>
</head>
<body>
<applet code="Test.class" archive="." width="500" height="200"><param name="codebase_lookup" value="false"></applet>
</body>
</html>
试验
函数testfunc(a,b){
返回[1,2];
}
被视为有效(图19.5和19.6)。你可以在我的代码中看到我选中了len instanceof Number
而不是len instanceof Double
,因为在我的IE中,它返回了一个整数
,我猜ret
应该是一个netscape.javascript.JSObject。如果它是javascript中的数组,您是否尝试使用ret.getSlot
?
<html>
<head>
<title> Test </title>
<script language="JavaScript">
function testfunc(a, b){
return [1, 2];
}
</script>
</head>
<body>
<applet code="Test.class" archive="." width="500" height="200"><param name="codebase_lookup" value="false"></applet>
</body>
</html>