0

我想知道是否可以在清单文件或其他地方指定属性,并在我的应用程序窗口中禁用 javascript 控制台。禁用 javascript 控制台将不允许用户简单地给自己钱,他们将被迫正常玩游戏。有谁知道是否可以在应用程序中禁用 javascript 控制台?它可能会出现在 Chrome 的未来版本中吗?

4

2 回答 2

6

与打开的 Web 或您正在处理的未打包应用程序相比,打包应用程序中对控制台的访问已经减少。鼠标上下文菜单将不提供进入开发者工具,并且应用程序中不存在 chrome 菜单。唯一的选择是来自 chrome:extensions 页面或 Chrome Apps Developer Tools。

有动力的用户将有其他几种途径,包括修改客户的来源。使用 javascript 混淆器进行处理会稍微困难一些。

如果您必须保护游戏逻辑以防止作弊,则需要从验证玩家操作的服务器执行此操作。这也可以通过缓存游戏动作并在可能的情况下发送验证来离线工作。但是,这在什么时候重要?如果是单人游戏,那就不多了。如果有排行榜,请将其设为社交排行榜,这样作弊者只会愚弄他们的朋友。如果它是完全多人游戏,您已经必须验证。;) 永远不要相信客户。

于 2013-10-17T00:40:30.357 回答
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 方法。获得更多钱的唯一方法是通过询问方法。即使在控制台中,他们写道:

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!"

现在有人可以访问控制台,这没关系。

于 2013-10-17T00:37:41.267 回答