Javascript Chrome应用程序评估()
我正在尝试为chrome创建一个简单的计算器。我需要使用eval来计算表达式,但它被chrome禁止。有解决办法吗?这是js。有人能给出解决办法吗?我到处都找过了Javascript Chrome应用程序评估(),javascript,eval,google-chrome-app,Javascript,Eval,Google Chrome App,我正在尝试为chrome创建一个简单的计算器。我需要使用eval来计算表达式,但它被chrome禁止。有解决办法吗?这是js。有人能给出解决办法吗?我到处都找过了 var text = document.getElementById("tBox"); var x = 0; var y = 0; var op = ""; var resetFlag = 0; document.getElementById("buttonbackspace").addEventListener("click",f
var text = document.getElementById("tBox");
var x = 0;
var y = 0;
var op = "";
var resetFlag = 0;
document.getElementById("buttonbackspace").addEventListener("click",function(){backspace()});
document.getElementById("buttonone").addEventListener("click",function(){addDigit(1)});
document.getElementById("buttontwo").addEventListener("click",function(){addDigit(2)});
document.getElementById("buttonthree").addEventListener("click",function(){addDigit(3)});
document.getElementById("buttonfour").addEventListener("click",function(){addDigit(4)});
document.getElementById("buttonfive").addEventListener("click",function(){addDigit(5)});
document.getElementById("buttonsix").addEventListener("click",function(){addDigit(6)});
document.getElementById("buttonseven").addEventListener("click",function(){addDigit(7)});
document.getElementById("buttoneight").addEventListener("click",function(){addDigit(8)});
document.getElementById("buttonnine").addEventListener("click",function(){addDigit(9)});
document.getElementById("buttonzero").addEventListener("click",function(){addDigit(0)});
document.getElementById("buttondecimal").addEventListener("click",function(){addDigit(".")});
document.getElementById("buttonaddition").addEventListener("click",function(){add()});
document.getElementById("buttonsubtraction").addEventListener("click",function(){subtract()});
document.getElementById("buttonmultiplication").addEventListener("click",function(){multiply()});
document.getElementById("buttondivision").addEventListener("click",function(){divide()});
var backspace = function() {
tBox.value = tBox.value.slice(0, -1);
};
var addDigit = function(x) {
tBox.value = tBox.value + x;
}
var add = function() {
if (x === 0) {
x = tBox.value;
tBox.value = "";
op = "+";
} else if (y === 0) {
y = tBox.value;
equals();
}
};
var subtract = function() {
if (x === 0) {
x = tBox.value;
tBox.value = "";
op = "-";
} else if (y === 0) {
y = tBox.value;
equals();
}
};
var multiply = function() {
if (x === 0) {
x = tBox.value;
tBox.value = "";
op = "*";
} else if (y === 0) {
y = tBox.value;
equals();
}
};
var divide = function() {
if (x === 0) {
x = tBox.value;
tBox.value = "";
op = "/";
} else if (y === 0) {
y = tBox.value;
equals();
}
};
var equals = function() {
y = tBox.value;
tBox.value = eval(x + op + y); //Eval over here
x = 0;
y = 0;
resetFlag = 1;
};
我没有什么可以做的。。。我给你做了一个函数来评估你的数学:
var eval = function( maths ){
// Lets start
var math_object = [];
var number = 0;
var pattern;
while( maths.length>0 ){
// get front number
number = parseFloat( maths );
// create regexp pattern
pattern = new RegExp('^'+((number>=0)?'\\+*':'')+number.toString(), 'i');
// check for error
if( isNaN(number) || !maths.match(pattern) ) return "Expression Error";
// cut number from string
maths = maths.replace(pattern,'');
// push number into array
math_object.push(number);
// Check if next has action
if( maths.length==0 ) break;
// get math action
if( !maths[0].match(/[\/\*+-]/i) ) return "Expression Error";
// save acton
if( maths[0].match(/[+-]/i) ){
math_object.push('+');
}else{
math_object.push(maths[0]);
maths = maths.substr(1);
}
}
if( math_object.length%2==0 ) return "Expression Error";
if( math_object.length==1 ) return math_object[0];
//console.log(math_object);
var math_object_structed = [];
var i = 0;
while( i<math_object.length ){
if( i+1==math_object.length ){
math_object_structed.push(math_object[i]);
break;
}
if( math_object[i+1]=='+' ){
math_object_structed.push(math_object[i]);
math_object_structed.push('+');
i+=2;
}else{
var array = [
math_object[i],
math_object[i+1],
math_object[i+2]
];
math_object.splice(i, 2);
math_object[i] = array;
}
}
//console.log(math_object_structed);
var doMath = function( math_array ){
while( math_array.length>1 ){
var first = math_array.shift();
if( typeof first != "number" )
first = doMath( first );
var action = math_array.shift();
var second = math_array.shift();
if( typeof second != "number" )
second = doMath( second );
var result;
if( action=='+' )
result = first + second;
else if( action=='*' )
result = first * second;
else if( action=='/' )
result = first / second;
else
return "Expression Error";
math_array.unshift( result );
}
if( typeof math_array[0] != "number" )
return doMath( math_array[0] );
else
return math_array[0];
}
return doMath( math_object_structed );
}
现在1+2+3/5+14*3*4*5+16的结果是859.6
我的函数eval1+2+3/5+14*3*4*5+16的结果是859.6
愉快的编码。您可以使用HTML5文件系统API首先将要评估的代码写入本地文件系统,然后评估执行脚本 第一步是请求文件系统:
navigator.webkitPersistentStorage.requestQuota(FILESYSTEM_RESOURCES_QUOTA_MB * 1024 * 1024, function (grantedBytes) {
console.log('Granted ' + grantedBytes + ' bytes for filesystem.');
window.webkitRequestFileSystem(window.PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, errorHandler);
function onInitFs(fs) {
// File system initialized
}
初始化文件系统后,在文件系统上创建一个临时文件并加载脚本:
fs.root.getFile('my-script.js', {create: true}, function(fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function(e) {
console.log('Write completed.');
// Execute the script
$.getScript(fileEntry.toURL());
};
fileWriter.onerror = function(e) {
console.log('Write failed: ' + e.toString());
};
// Create a new Blob and write it to my-script.js.
var blob = new Blob([scriptText], {type: 'text/plain'});
fileWriter.write(blob);
}, errorHandler);
}, errorHandler);
阅读Chrome文档。它回答了这个常见的问题。你可以根据操作符来决定操作。将op转换为函数,方法对象中的许多函数之一,然后evalx+op+y可以是op+x,+yYes,我在Chrome应用程序中使用它。很好用!你凭什么认为这行不通?我不太确定如何在我的脚本中使用它。我将如何实现它,而不是说,tBox.value=evaltBox.value此解决方案无法上载到CWS,因为它违反了服务条款。我已验证此技术在Chrome应用程序中确实有效。然而,sowbug的问题仍然存在。它不是一个扩展,而是一个应用程序。你读过这篇文章吗?为简洁起见,我们将通篇使用术语扩展,但这个概念同样适用于应用程序。