XMLHTTPRequest загрузка локального файла в расширении Chrome - PullRequest
0 голосов
/ 07 сентября 2018

Таким образом, XMLHttpRequest не должен работать для загрузки локальных файлов для веб-сайтов. Было бы безумным риском для безопасности, если бы человек действительно мог получить доступ к файловой системе пользователя через JavaScript.

Но по какой-то причине, когда я использую XMLHttpRequest для загрузки локального текстового файла в расширении Chrome, он работает. Почему, когда я использую XMLHttpRequest для расширения chrome в фоновом скрипте, он загружает файл? Это недостаток безопасности или это намеренно? И разве это не создает угрозы безопасности, подобные тому, что запрос загружает локальные файлы на веб-странице?

Позвольте мне попытаться объяснить это как можно лучше:

У меня есть текстовый файл с именем abc.txt, и я хочу открыть его и прочитать содержимое файла через JavaScript, поэтому я решил использовать XMLHttpRequest.

<!DOCTYPE html>
<html>
<body>
<script>
</script>
  <script>
    let txt = '';
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.status == 200 && xmlhttp.readyState == 4){
                txt = xmlhttp.responseText;
                console.log(txt)
            }
    };
    xmlhttp.open("GET", "abc.txt", true);
    xmlhttp.send();
  </script>
</body>
</html>

Я получаю обычную ошибку, test.html:17 Failed to load file:///C:/Users/none/of/your/business/abc.txt: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

Однако, когда я делаю расширение Chrome, я могу загрузить локальный файл через скрипт background.js.

файл manifest.js:

{
    "name": "Question",
    "version": "1.0",
    "manifest_version": 2,
    "background": {
        "persistent": true,
        "scripts":["background.js"]
    }
}

background.js file:

chrome.runtime.onInstalled.addListener(function() {
    let txt = '';
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.status == 200 && xmlhttp.readyState == 4){
                txt = xmlhttp.responseText;
                console.log(txt)
            }
    };
    xmlhttp.open("GET", "abc.txt", true);
    xmlhttp.send();
});

доказательство того, что текстовый файл загружен: enter image description here

Если перефразировать мой вопрос, почему XMLHttpRequests по-разному воспринимает сценарий расширения chrome background.js? Разве это не создает проблемы, подобные тем, что возникают при запросе XMLHttpRequts на веб-странице?

ПРИМЕЧАНИЕ. XMLHttpRequest, кажется, работает только в файле background.js, в ту минуту, когда я связываю файл с HTML-документом, он перестает работать, и я получаю обычное сообщение об ошибке. Поэтому я не могу запустить его для всплывающего HTML-файла.

1 Ответ

0 голосов
/ 09 сентября 2018

Поскольку, согласно Делиазу, ответ состоял в том, что chrome допускает запросы CORS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...