我想知道是否可以在清单文件或其他地方指定属性,并在我的应用程序窗口中禁用javascript控制台。禁用javascript控制台将不允许用户只是给自己钱,他们将被迫正确地玩游戏。有谁知道是否可以在应用程序中禁用javascript控制台?它可能会在Chrome的未来版本中出现吗?
答案 0 :(得分:6)
打包的应用程序与开放式网络或正在处理的解压缩应用程序相比,对控制台的访问已经减少。鼠标上下文菜单不提供进入开发人员工具,并且应用程序中不存在镶边菜单。唯一的选择是Chrome:扩展程序页面或Chrome Apps开发者工具。
有动力的用户将拥有其他几条路线,包括修改客户端的来源。使用javascript混淆器进行处理会使其稍微困难一些。
如果您必须保护游戏逻辑以防止作弊,则需要从验证玩家行为的服务器执行此操作。这也可以离线工作,通过缓存游戏操作并尽可能发送验证。但是,这在什么时候重要?如果是单人游戏,那就不多了。如果有排行榜,那就让他们成为社交排行榜,这样骗子就会欺骗他们的朋友。如果它是完全多人游戏,您必须验证。 ;)永远不要相信客户。
答案 1 :(得分:1)
您需要使用闭包,然后您可以保护他们不应该修改的代码部分。
例如,假设你有一个游戏,他们回答一个简单的数学问题来赚钱,当他们有足够的钱,我们会说1000美元,他们可以买枪。你不想让他们只是为他们的账户增加资金,但他们应该能够回答问题来赚钱。您只需公开getMoney函数,并隐藏其他所有内容,如下所示:
var game = function() {
var money = 0;
var hasGun = false;
var getMoney = function() {
response = prompt("What is 2+2?");
if (response == 4) money += 100;
alert("You have $" + money);
}
var showMoney = function() {
console.log(money);
}
var buyGun = function() {
if (money >= 1000) {
hasGun = true;
money -= 1000;
alert("You bought a gun!")
}
else alert("Not enough money!")
}
//we'll use this to expose methods and variables.
var public =
{
getMoney: getMoney,
buyGun: buyGun,
showMoney: showMoney
}
return public;
}()
game.getMoney();
他们可以从控制台访问您的公开函数中唯一的东西是ask方法和showMoney方法。获得更多资金的唯一方法是通过ask方法来实现。即使在控制台中他们写道:
game.money = 1000;
game.showMoney(); //returns 0;
game.hackForMoney = function() { money = 1000; }
game.hackForMoney();
game.showMoney(); //returns 0;
game.showMoney = function() { return 1000; }
game.buyGun(); //alerts "Not enough money!"
现在有人可以访问控制台,这没关系。