Я получаю доступ к своим роботам через Wi-Fi, используя сторонний маршрутизатор. Я написал небольшое приложение, которое автоматически входит в маршрутизатор, перемещается по tab
интерфейсу маршрутизатора, используя JavaScript
внутри QML
приложения. Небольшая проблема, с которой я столкнулся, заключается в том, что мне нужно активировать реле для включения/выключения робота, а в графическом интерфейсе маршрутизатора мне нужно активировать combobox
, как показано на экране печати ниже. После нажатия на вкладку I/O
адрес страницы роутера будет https://123.456.789.123:7878/admin/ACEmanagerX.html#
:
Соответствующий html
также показан ниже:
РЕДАКТИРОВАНИЕ
Теперь, чтобы воспроизвести проблему, я развернул очень маленький веб-сайт https://comboboxtest.netlify.com/, который содержит только один список со списком с тем же именем и тем же выбором, который я пытаюсь вызвать.
Проблема в том, что я не могу найти простой способ включить или выключить реле.
Ожидаемое поведение будет таким: если это OFF
(значение 0), поставьте его ON
(значение 1, которое означает низкий уровень активности диска) и наоборот.
Если вы скопируете/вставите приведенный ниже код и запустите его, он автоматически откроет веб-сайт, но, к сожалению, он не изменит поле со списком с позиции OFF
на Drive Active Low
и наоборот.
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtWebEngine 1.9
ApplicationWindow{
id: root
width: 1940
height: 1100
visible: true
property string cBox: "https://comboboxtest.netlify.com"
QtObject {
// Below property triggers the combo box of the relays evaluating the normally closed (NC) or
// normally opened (NO) circuit
property string get_normallyClosed_or_normallyOpened_comboBox: "
var comboBox = document.getElementsByName('859-2-2')[0];
comboBox.addEventListener('change', function (e) {
comboBox.options[0].selected = true;
if ('createEvent' in document) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('change', false, true);
sel.dispatchEvent(evt);
}
else {
sel.fireEvent('onchange');
}
});
sel.addEventListener('change', function (e) {
alert('changed');
});
".arg(cBox)
}
Timer {
id: timer
interval: 1000; repeat: false
onTriggered: view.runJavaScript(internals.get_normallyClosed_or_normallyOpened_comboBox)
}
WebEngineView {
id: view
anchors.fill: parent
onUrlChanged: {
console.log(url)
if(url === Qt.resolvedUrl("https://comboboxtest.netlify.com/"))
timer.running = true
}
onCertificateError: function(error) {
error.ignoreCertificateError();
}
Component.onCompleted: view.url = "https://comboboxtest.netlify.com"
}
}
Что я уже пробовал
1) После прохождения этот пост Я выяснил, что очень важно дать время для запуска http
запроса. Вот почему я добавил interval: 20000
после входа на вкладку I/O. Однако это не помогло, и поле со списком не сработало.
2) я использовал этот источник чтобы помочь мне понять, как вызвать поле со списком через JavaScript
, и это именно то, что я применил, но я не видел никаких изменений в поле со списком.
3) я нашел этот пост что очень близко к тому, что я делаю, с той разницей, что здесь также использовалось Button
для запуска поля со списком. Но в моем случае у меня нет кнопки.
Я знаю, что я близок к тому, чтобы это сработало, но есть кое-что, чего мне не хватает. Спасибо, что пролили свет на этот вопрос для решения проблемы
console.log
вывода! Еще раз большое спасибо! :) 21.11.2019