Подтвердить что ты не робот

Как получить доступ к текстовому содержимому, полученному через <script type = "text/plain" src=...> в JavaScript?

При использовании <script type="text/plain" src="http://..."></script>, где URL-адрес относится к текстовому файлу, есть ли способ доступа к содержимому файла в JavaScript? Файл переносится в браузер, но значение свойства innerHTML элемента script не изменяется (оно остается пустой строкой). Проверка элемента node в DOM, похоже, не обнаруживает какого-либо свойства, через которое можно было бы найти полученный контент.

Я знаю, что вместо этого можно использовать XMLHTTPRequest, но Im заинтересован в проблеме, почему браузеры извлекают данные так, как я описывал, но, похоже, не предлагают никакого доступа к ней.

4b9b3361

Ответ 1

Прежде всего, атрибут text HTMLScriptElement является предпочтительным способом доступа к тексту встроенного элемента <script>. DOM-Level-2 и HTML5: 4.11.1 оба что script должен иметь атрибут text, который содержит внутренний текст сценариев:

Атрибут IDL text должен возвращать конкатенацию содержимого всех узлов Text, которые являются дочерними элементами элемента script (игнорируя любые другие узлы, такие как комментарии или элементы), в древовидном порядке. При настройке он должен действовать так же, как атрибут textContent IDL.

Так как элемент <script> пуст (вы указали внешний источник), text, textContent и innerHTML пусты. Это связано с тем, что атрибут text установлен только в встроенных скриптах:

Если script является встроенным, а тип блока script - текстовым языком:

Значение атрибута text IDL в момент последнего флажка элемента "уже началось" - это источник script.

Таким образом, невозможно использовать внешний text/plain, используя этот метод.

См. также:

Ответ 2

Обратите внимание, что если бы это было подтверждено, это обеспечило бы огромную дыру в безопасности и средство для защиты от межсайтовых скриптовых защит, которые защищают json и другие данные. По сути, моя неприятная веб-страница (nasty.com, скажем) может получить доступ к вашим личным данным, защищенным куки файлами, загрузив ее с помощью тега script. например.

<script type="text/plain" 
       src="https://supersecure.com/youraccount/privatedocs/list"/>

Поскольку файлы cookie для supersecure.com будут автоматически отправляться с запросом (как это бывает при запросе любых ресурсов), защищенный сайт просто возвращает данные (например, список частных документов), поскольку он не мог легко сказать запрос отдельно от одного из запроса ajax с его законной веб-страницы. Это отверстие не существует с ajax, так как браузер просто запретит странице от nasty.com делать запрос ajax на supersecure.com, благодаря той же политике происхождения.

Очевидно, что нет проблем безопасности с встроенными данными.

Ответ 3

После нескольких дней исследования того же вопроса я нашел несколько ссылок на следующий код:

<html>
<head>
<script type="text/javascript">
function init(){
var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data;
extText = extText.replace(/[\r\n]/g," ");
document.forms[0].nMessage.value = extText;
}
window.onload=init;
</script>
</head>
<body>
<iframe name='messageTxt' src='txtData.txt'  style='display:none'></iframe>
<form>
<textarea name='nMessage'></textarea>
<input type="button" value="click" onClick="init()">
</form>
</body>
</html>

Приведенный выше код действительно получает доступ к файлу txtData.txt(при условии, что он существует) и выгружает его в <textarea> в качестве текста по умолчанию. По какой-то причине ни один из вышеприведенных ответов не упоминает, что это работает, я полагаю, потому что вопрос, кажется, подразумевает тег <src> специально (так как подобный метод может быть недоступен, я не проверял); тем не менее, я все же считаю, что стоит упомянуть, полагая, что ваш запрос содержит более общий вопрос о получении внешнего .txt файла (или если кто-то другой, кто сталкивается с этой страницей, ищет упомянутый вопрос anwser), в основном потому, что мне потребовалось несколько часов, чтобы исследовать его, поэтому я считаю правдоподобным, что ответ был просто затруднительным.

Ответ 4

Да, нет, я не думаю, что вы можете получить текстовое содержимое. Это главным образом потому, что вы собираетесь использовать элементы доступа к дому, чтобы получить текст, который никогда не вводился в самом домене.

Я попробовал несколько вариантов, и они не сработали. У меня нет веских причин, почему вы не сможете его найти, но причина, по которой я отказываюсь от этого, так это потому, что даже инспектор WebKit, который я использую, не имеет раскрытия треугольника рядом с тегом script -src. Что он делает, так это то, что он преобразует src в ссылку, на которую вы можете щелкнуть, а затем использует Ajax или что-то еще, чтобы прочитать этот текст с сервера.