Доступ к DOM с помощью nodejs + appjs + node-serial
У меня хорошо работает приложение appjs. Я пытаюсь в принципе либо вызвать существующую функцию JavaScript изнутри загруженной страницы на событие. ИЛИ получить доступ к элементам страниц события. Я использую библиотеку node-serial со сканером штрих-кода Honeywell. Я могу получить доступ к последовательному порту в порядке, я могу получить данные сканирования просто отлично с:
serialPort.on('data', function(data) { ... });
То, что я хочу сделать, это, как указано выше, вызвать функцию javascript на странице, т.е.
window.document.body.scan(data);
ИЛИ, по крайней мере, получить доступ к данным и иметь возможность звонить / делать HTTP-запросы с узлом, что я тоже могу делать хорошо. Когда я запускаю эти вещи в
window.on('ready', function(){ ... });
Я могу получить доступ к элементам на странице просто отлично. т.е.
var $ = window.$;
$("#message").html('Something...');
Но если я пытаюсь запустить точно такой же код в функции данных serialPort.on, я получаю такие ошибки, как
$('#message').html('Please wait...');
^
TypeError: object is not a function...
Или даже $("#message"). Html, что "html" не является функцией. Но если я запускаю его в функции window.on ready, это работает. Я довольно растерян, так как документации для appjs очень мало. Спасибо!
2 ответа
SerialPort.on('data',function(){ ... }); код запускается в AppJS, поэтому для доступа к окну вам нужно использовать переменную Window, попробуйте изменить код на:
window.$('#message').html('Please wait...');
Чтобы иметь возможность вызывать пользовательскую функцию (называемую сканированием), выполните следующие действия в window.on('ready', function(){ ... });
window.scan = function() {
//code to connect to the scanner here.
console.log("scan run");
}
Затем где-нибудь на html-странице внутри чего-то вроде кнопки вы можете вызвать эту функцию:
<body>
<button onclick="window.scan();">Scan Now!</button>
</body>
Вы пытались получить к нему доступ из верхней части ваших файлов JS? Кажется, что Window не определено, а не $ instance.
Я сделал это в недавнем проекте для доступа к узлам DOM, используя jQuery в модуле узла, который я написал. Добавьте это в ваш файл app.js, он использует глобальную переменную Node
// Under your window definition
global.$ = window.$;
Это позволит вам использовать $ без префикса окна во всех ваших файлах / модулях узла.