我有一個javascript對象,我通過websocket作爲原始文本傳遞給客戶端。此原始文本(現在)在收到時直接傳遞給eval語句。問題在於,由於某種原因,Javascript在將數據傳遞給事件處理程序之前一直處理數據。我很有智慧。JavaScript Websocket通過代碼來評估
正在被跨越的WebSocket傳遞的對象是:
var obj = {
evaluate:function(str) {
digit = parseInt(str,10);
if(isNaN(digit)) {
log.write("Invalid input: "+str);
} else {
log.write(this.spigot(digit));
}
},
spigot:function(digit) {
len = Math.floor(10*digit/3)+1;
A = new Array(len);
for(var i=0;i<len;i++) A[i]=2;
var finalDigit = 0;
var nines = 0;
var predigit = 0;
for(i=1;i<digit+1;i++) {
q = 0;
for(j=len;j>0;j--) {
x = 10*A[j-1] + q*j;
x = Math.floor(x)
A[j-1] = x % ((2*j)-1);
A[j-1] = Math.floor(A[j-1]);
q = x/((2*j) -1);
q = Math.floor(q);
}
A[0] = Math.floor(q%10);
q = Math.floor(q/10);
if(q==9) {
nines++;
} else if (q==10) {
finalDigit = predigit+1;
for(j=0;j<nines;j++) {
finalDigit = 0;
}
predigit=0;
nines=0;
} else {
finalDigit = predigit;
predigit=q;
for(j=0;j<nines;j++) {
finalDigit = 9;
}
nines=0;
}
}
return finalDigit;
}
}
客戶端接收消息整體(我查了同時使用Chrome的開發者工具和Firebug的)。然而,當我在下面的事件處理得到的消息:
function socketMessage(e) {
log.write(e.data); //a log function I have written
}
e.data包含:
obj = {
evaluate:function(str) {
digit = parseInt(str,10);
if(isNaN(digit)) {
log.write('Invalid input: '+str);
} else {
log.write(this.spigot(digit));
}
},
spigot:function(digit) {
len = Math.floor(10*digit/3)+1;
A = new Array(len);
for(var i=0;i<len;i++) A[i]=2;
var finalDigit = 0;
var nines = 0;
var predigit = 0;
for(i=1;i<digit+1;i++) {
q = 0;
for(j=len;j>0;j--) {
x = 10*A[j-1] + q*j;
x = Math.floor(x)
A[j-1] = x %((MISSING)(2*j)-1);
A[j-1] = Math.floor(A[j-1]);
q = x/((2*j) -1);
q = Math.floor(q);
}
A[0] = Math.floor(q%)(MISSING);
q = Math.floor(q/10);
if(q==9) {
nines++;
} else if (q==10) {
finalDigit = predigit+1;
for(j=0;j<nines;j++) {
finalDigit = 0;
}
predigit=0;
nines=0;
} else {
finalDigit = predigit;
predigit=q;
for(j=0;j<nines;j++) {
finalDigit = 9;
}
nines=0;
}
}
return finalDigit;
}
}
注意代碼如何已突變。隨機添加了(MISSING)
個字符串,其中幾個方程已被截斷。
這是怎麼發生的?
編輯1:
玩弄了一會兒後,我已經注意到了%
符號後正好不管其位置的。所以我的問題是,爲什麼意義呢的%
運營商有在這裏,是導致事件監聽器屠殺我的代碼的內容?
編輯2:
這樣看來%
被解釋爲轉義字符傳遞給我的回調函數之前。我已經嘗試使用%25
在通過套接字發送它之前,但無濟於事。