HTML-декодирование в React Native не работает для Android - PullRequest
0 голосов
/ 30 октября 2019

У меня есть клиент 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 };
};

У кого-то были подобные проблемы или могут дать некоторые советы о том, как решить эту проблему?

Спасибо!

...