Как запретить браузеру кодировать ‹, › и & при чтении iframe файла TXT на веб-странице?

Я заметил, что браузеры кодируют левую скобку ‹, правую скобку > и амперсанд & в соответствующие коды (//) при чтении innerHTML исходного iframe TXT-файла. Как мне предотвратить это? Внутренний HTML также будет заключен в тег ‹pre›.

Например, предположим, что внутри файла TXT (не HTML) есть следующее:

<div>
    Hello world! I love M&M's candy.
</div>

Следующий iframe:

<iframe id="MyIframe" src="/hello.txt"></iframe>

И следующий JavaScript:

var MyIframe = document.getElementById('MyIframe');
alert(MyIframe.contentWindow.document.innerHTML);

Появится диалоговое окно предупреждения со следующим:

<pre>
    &lt;div&gt;Hello world! I love M&amp;M's candy.&lt;/div&gt;
</pre>

Как запретить JavaScript делать это с содержимым файла TXT? Мне просто нужен необработанный, незакодированный контент файла.

Я не могу использовать XMLHTTPRequest.


person user3163495    schedule 25.08.2016    source источник
comment
вы можете использовать textContent вместо innerHTML. Когда вы проверяете сетевой журнал, какой Content-Type сервер отправляет с текстовым файлом?   -  person Thomas    schedule 25.08.2016
comment
@Thomas text/plain;charset=UTF-8   -  person user3163495    schedule 26.08.2016


Ответы (2)


Вместо получения .innerHTML получите .textContent. Это должно возвращать только удобочитаемый текст в дереве элементов в удобочитаемой форме. Вы можете попробовать это на этой странице, проверив один из ваших образцов HTML в своем вопросе и написав $0.textContent в консоли разработчика.

person Katana314    schedule 25.08.2016

Браузер преобразует ваш текстовый файл в HTML. Если вы проверяете DOM https://wordpress.org/plugins/about/readme.txt, вы увидите, что это HTML, а не просто текстовый файл, когда он его отображает.

Как предлагали другие, вы можете просто получить MyIframe.contentWindow.document.textContent, который будет декодировать любые специальные символы HTML (теперь, когда вы знаете, что браузер автоматически его кодирует).

введите здесь описание изображения

person Juan Mendes    schedule 25.08.2016