jquery не работает в nw.js (узел webkit)

Я переключаю свое настольное приложение с электронного на nw.js из-за функций безопасности исходного кода.

Мне требуется модуль jquery-confirm в моем файле nodejs, я получаю эту ошибку:

Uncaught Error: jquery-confirm requires jQuery

Я исправляю эту ошибку:

var $ = require('jquery');
window.jQuery = $;
var jconfirm = require('jquery-confirm');

и импортировать файл js в index.html следующим образом:

<script>require('./bot.js')</script>

Потому что я получаю ту же ошибку jquery, если мне нужен файл js, например:

<script src="bot.js"></script>

Когда я исправляю ошибку, как указано выше, и запускаю приложение с nw.js, оно сразу же вылетает, выдавая эту ошибку:

TypeError: $(...).button is not a function

Первый вопрос: я предполагаю, что с jquery что-то не так. Когда я импортирую его в index.html, он вообще не работает. Тем не менее, я все еще сталкиваюсь с проблемами после того, как потребовал его в файле js. Как я могу это исправить?

Второй вопрос: почему я не получаю Uncaught Error: jquery-confirm требует ошибки jQuery, если я импортирую свой файл js, используя «require» вместо?


person Mr. Blockchain    schedule 24.02.2018    source источник


Ответы (1)


Это проблема контекста javascript в Node Webkit. Мы должны убедиться, что весь javascript, необходимый внутри браузера (контекст окна), перенесен в этот контекст с помощью атрибута src тега script.

Node Webkit помещает JavaScript из операторов require() в глобальный контекст nodejs и делает его недоступным внутри браузера.

Таким образом, мы видим такие ошибки, как $ is not defined или $(...).button() is not a function, если файлы находятся в противоположных контекстах.

person Randy Casburn    schedule 24.02.2018
comment
не первый раз увидел. $(...).button не является функцией jQuery. Метод кнопки - это метод jQueryUI, а не jQuery. - person Randy Casburn; 25.02.2018
comment
но он работает без проблем, когда я использую электрон и импортирую jquery в html вместо файла js - person Mr. Blockchain; 25.02.2018
comment
Что ж, тогда это возвращает нас к исходной точке. Если я правильно помню, использование require() в файле index.html поместит включенный скрипт в контекст узла. Таким образом, вы должны использовать форму <script src="...">, чтобы поместить сценарий в контекст window. - person Randy Casburn; 25.02.2018
comment
когда я это делаю, jquery как-то не определен. Я проверил библиотеку jquery-confirm, и она выдает эту ошибку, когда jquery не определен - person Mr. Blockchain; 25.02.2018
comment
Вам нужно поместить все JS-файлы контекста window в атрибуты src. Не только jQuery. Вы тоже добавили jquery-confim в <script src="...">? - person Randy Casburn; 25.02.2018
comment
Я поместил их все в атрибуты src. Теперь я получаю «Uncaught TypeError: $(...).bootstrapToggle не является функцией» для библиотеки переключения начальной загрузки. - person Mr. Blockchain; 25.02.2018
comment
Хорошо! Это прогресс. Таким образом, вам также нужно поместить тег script с src для библиотеки переключения начальной загрузки. Развивается закономерность. Теперь дело за несколькими правками :-) - person Randy Casburn; 25.02.2018
comment
У меня уже был тег script для этого, но я исправил его, поместив свой код в 'window.onload = function(){' . Мой код работал без проблем в электроне, но я думаю, что это потому, что электрон ждет загрузки всего перед выполнением вашего файла javascript, однако мне нужно было window.onload для nw.js - person Mr. Blockchain; 25.02.2018
comment
Потрясающий. Рад, что ты разобрался. - person Randy Casburn; 25.02.2018