Отключить DevTools на NWJS 13

Мы разрабатываем приложение на основе приложений Chrome с версией NWJS 0.13.0 Alpha, поскольку более низкие версии не поддерживают приложения 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 оттуда, но если они нажмут F12 или же Shift-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;
}

Я получил вышеуказанные коды клавиш для клавиатуры Apple.

Я действительно новичок в кодировке Javascript, поэтому, вероятно, некоторые из моих попыток не верны или близки к правильному.

Есть ли способ отключить открытие инструментов dev на NWJS 13 на любой ОС?


редактировать

Я обнаружил, что во 2-й попытке с использованием 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

Я обнаружил, что есть разные коды клавиш для разных ОС, как видно из этой таблицы, поэтому я думаю, что я не получил успешного ответа при тестировании на Windows и OS X из-за этого.

5 ответов

Решение

Хорошо, после того, как я попробовал много вещей и прочитал множество примеров, я обнаружил, что ctrlKeyaltKeyshiftKey а также metaKey свойства.

После этого я пришел с этим скриптом, который не позволит пользователям открывать DevTools на NWJS 13 от ярлыков (т.е. F12 в Windows и Linux и ⌘ ⌥ I на 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 version 3 (без SDK), которая была указана в NWJS Google Group, но я прочитал ее позже.

Когда DevTools открыт, окно имеет событие devtools-открыл

в этом случае используйте closeDevTools(), чтобы закрыть выигрыш Devtools

<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, как показано ниже:

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

Это невозможно по замыслу. Если вы пытаетесь запретить пользователям видеть код или взломать страницу, это не поможет. Смотри старый вопрос.

Я немного удивлен, что никто не указал на это, но единственная причина, по которой вы вообще можете запускать DevTools, заключается в том, что вы используете версию SDK, то есть отладочную версию, которую вы в любом случае не должны предоставлять клиентам.

Просто используйте prod [нормальную] версию NW.js. В prod-версии вообще нельзя открыть окно DevTools, даже программно. Попытка сделать это принудительно даст вам пустое окно. Принятый ответ на самом деле не мешает умному человеку запускать DevTools.

Другие вопросы по тегам