Отключить 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 ответов
Хорошо, после того, как я попробовал много вещей и прочитал множество примеров, я обнаружил, что ctrlKey
altKey
shiftKey
а также 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.