在 nwjs 13 上禁用 DevTools

Disable DevTools on nwjs 13

我们正在基于NWJS 0.13.0 Alpha 版本的Chrome Apps 开发一个应用程序,因为较低的版本不支持Chrome Apps。我们需要版本 13 以便我们可以使用串行端口。

但是在 Windows 或 Ubuntu 中,当按下右键时,它显示了一个我禁用的菜单(因为它是这样指定的),在我的所有 [=52= 中具有以下功能]的:

<body oncontextmenu="return false">
<script language="javascript">
    document.onmousedown=disableclick;
    function disableclick(event) {
        if(event.button==2) {
            return false;
        }
    }
</script>

但是在 Mac OS X 中,由于自定义菜单,我们遇到了另一个问题,在阅读 Manifest Format 之后,我发现在我的 package.json 文件中我需要添加 "no-edit-menu": false 属性,该菜单不再显示,package.json 文件如下:

{
    "main": "main.html",
    "name": "PAGUSS",
    "description": "Paguss Payment Services",
    "version": "0.1.0",
    "keywords": [ "paguss", "payment" ],
    "window": {
        "title": "Paguss",
        "transparent": true,
        "icon": "assets/images/64x64.png",
        "toolbar": false,
        "frame": true,
        "resizable": true,
        "position": "mouse",
        "min_width": 400,
        "min_height": 500,
        "max_width": 1200,
        "max_height": 800,
        "no-edit-menu": false
    },
    "webkit": {
        "plugin": false
    }
}

现在,我尝试更改 package.json 文件上的 "toolbar": false,,因此没有工具栏,因此用户无法从那里打开 devtools,但是如果他们按 F12Shift-Ctrl-J 他们仍然能够打开 devtools window。我还在上面的脚本中尝试了以下行,试图禁用 devtools window 打开但没有成功(至少在 Mac OS X 上,我们优先禁用它) :

if(event.button==2 || window.event.keycode==123 || (window.event.keycode==55 && window.event.keycode==58 && window.event.keycode==34)) {
    return false;
}

我从 here 获得了苹果键盘的上述键码。

我真的是 Javascript 编码的新手,所以我的一些尝试可能不正确或接近正确。

有什么方法可以禁止开发工具在任何 OS 上打开 NWJS 13?


编辑

我发现我第二次尝试使用 keyCodes 时出错。

我试图在右键单击事件中调用脚本,我将代码更改为:

<script language="javascript">
    document.onmousedown=disableclick;
    document.onkeydown=disableconsole;
    function disableclick(event) {
        if(event.button==2) {
            return false;    
        }
    }
    function disableconsole(event) {
        if (event.keyCode==123) {
            return false;
        }
    }
</script>

这实际上阻止了控制台使用 Linux 上的 F12 键打开开发工具,但是 Windows 和 OS X 仍然无法使用此更新。

编辑 2

我发现不同的 OS 有不同的键码,正如 table 上所见,所以我想我在 Windows 上测试时没有得到成功的响应OS X 因为它。

设计上是不可能的。 如果您试图阻止用户看到代码或破解页面,这将无济于事。 See the old question.

好吧,在尝试了很多事情并阅读了大量示例之后,我发现有 ctrlKey altKey shiftKey and metaKey 个属性。

在那之后,我附带了这个脚本,它将阻止用户从快捷方式打开 NWJS 13 上的 DevTools(即 Windows 和 Linux 和 ⌘ ⌥ I 上的 F12 Mac)。并且还禁用右键菜单。

<script language="javascript">
    document.onmousedown=disableclick;
    document.onkeydown=disableconsole;
    function disableclick(event) {
        if(event.button==2) {
            return false;    
        }
    }
    function disableconsole(e) {
        evtobj = window.event? event : e;
        if (evtobj.keyCode==123 || //Linux & Windows
                (evtobj.metaKey && evtobj.altKey && evtobj.keyCode==73)) { //Mac
            return false;
        }
    }
</script>

编辑

解决这个问题的另一种方法是使用 NWJS alpha 版本 3(没有 SDK),它在 NWJS Google Group 上指定,但我后来读了它。

当 DevTools 打开时,window 有一个事件 devtools-opened

在此事件中使用 closeDevTools() 关闭 Devtools win

<script type="text/javascript">
var gui = require('nw.gui'); 
var win = gui.Window.get();
win.on("devtools-opened",function(){
    console.info("devtools-opened");
    win.closeDevTools();
});
</script>

要禁用 DevTools,您可以在 package.json 中使用 chromium args,如下所示:

{
    "name": "desktopApp",
    "main": "index.html",
    "version": "1.0.0",
    "chromium-args": "--disable-devtools"
}

我有点惊讶没有人指出这一点,但你可以启动 DevTools 的唯一原因是因为你使用的是 SDK 版本,也就是你不应该使用的调试版本无论如何都给客户。

只需使用 NW.js 的 prod [普通] 版本。在产品版本中,您根本无法打开 DevTools window,甚至无法以编程方式打开。试图强行这样做会给你一个空白 window。接受的答案实际上并没有阻止聪明人启动 DevTools。