У меня есть клиент React Native, который извлекает список кнопок (элементов HTML) из веб-клиента (у меня нет доступа к веб-серверу) и анализирует элементы HTML. Мне нужно показать список кнопок в мобильном приложении. Единственный способ, которым я могу получить доступ к кнопкам, - через имя кнопки (без идентификатора), а некоторые имена содержат специальные символы. Мне пришлось расшифровать эти символы с помощью приведенного ниже кода. Это работает для iOS, и я смог увидеть все кнопки с моего iPhone. Тем не менее, он не работает для Android, и я не могу понять, если это из-за синтаксического анализатора или декодера.
import DomSelector from 'react-native-dom-parser';
export const decodeHtmlEntity = (str) => {
return str.replace(/&#(\d+);/g, (match, dec) => {
return String.fromCharCode(dec);
});
};
export const parseButtonsValues = (html) => {
// Build an object that respresents the DOM from the fetched string
const document = DomSelector(html);
const buttonsValues = [];
if (document) {
// Retrieve the Door Control element
const doorControlElement = document.getElementById('doorcontrolcontent');
if (doorControlElement) {
// Check if the Door Control element contains a form with Action name '/DoorControl/PerformUnlock'
// The door buttons would be returned inside this form
const forms = doorControlElement.getElementsByTagName('form');
if (forms && forms.length > 0) {
const form = forms[0];
if (form.attributes.action === '/DoorControl/PerformUnlock') {
const buttons = form.getElementsByTagName('button');
// Parse the buttons and add their epName property to the buttonsValues array to be returned
// The epName property is usually the address of the building to be opened
buttons.forEach((button) => {
if (button.attributes.name === "epName") {
buttonsValues.push(decodeHtmlEntity(button.attributes.value));
}
});
}
}
return { controlElementExists: true, buttonsValues };
}
}
return { controlElementExists: false, buttonsValues };
};
У кого-то были подобные проблемы или могут дать некоторые советы о том, как решить эту проблему?
Спасибо!