7

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

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

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

但是在 Mac OS X 中,由于自定义菜单,我们遇到了另一个问题,在阅读清单格式后,我发现在我的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
    }
}

现在,我尝试更改文件"toolbar": false,package.json因此没有工具栏,因此用户无法从那里打开 devtools,但如果他们按下F12Shift-Ctrl-J他们仍然能够打开 devtools 窗口。我还在上面的脚本中尝试了以下行,以尝试禁用 devtools 窗口以无法成功打开(至少在 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;
}

我从这里得到了苹果键盘的上述键码。

我对 Javascript 编码真的很陌生,所以我的一些尝试可能不正确或接近正确。

有没有办法在任何操作系统上禁用开发工具在 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>

这实际上阻止了控制台F12在 Linux 上使用密钥打开开发工具,但是即使使用此更新,Windows 和 OS X 仍然无法正常工作。

编辑 2

我发现在这张上看到的不同操作系统有不同的 keyCodes,所以我想我在 Windows 和 OS X 上测试时没有得到成功的响应。

4

5 回答 5

4

当 DevTools 打开时,窗口有一个事件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>
于 2015-12-10T05:41:38.327 回答
2

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

{
    "name": "desktopApp",
    "main": "index.html",
    "version": "1.0.0",
    "chromium-args": "--disable-devtools"
}
于 2016-07-30T21:01:06.747 回答
1

好吧,在尝试了很多东西并阅读了大量的例子之后,我发现了一些属性。ctrlKey altKey shiftKeymetaKey

F12之后,我提供了这个脚本,它可以防止用户通过快捷方式(即在 Windows、Linux 和⌘ ⌥ IMac 上)打开 NWJS 13 上的 DevTools 。并且还禁用右键单击菜单。

<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上指定的,但我后来读了它。

于 2015-11-12T20:26:32.620 回答
0

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

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

于 2021-12-14T11:28:34.340 回答
0

这是设计不可能的。如果您试图阻止用户查看代码或入侵页面,这将无济于事。见老问题。

于 2015-11-11T21:34:36.803 回答