Я читаю XML-файл с помощью javascript, а затем отображаю его на своей html-странице
он отлично работает с FireFox.
Я погуглил и обнаружил, что это потому, что мой файл находится на моем жестком диске, поэтому Chrome и IE не работают, а Chrome выдает эту ошибку
clocks.html:20 Failed to load file:///B:/Data/clocks.xml:
Cross origin requests are only supported for protocol schemes:
http, data, chrome, chrome-extension, https.
поэтому я создал локальный веб-сайт и добавил туда файл
http://localhost/clocks.xml
Я могу получить доступ к файлу по этой ссылке, но когда я заменяю clocks.xml в моем скрипте на http://localhost/clocks.xml, страница не работает даже в FireFox и получаю эту ошибку из FireFox
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at http://localhost/clocks.xml.
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]
как я могу заставить это работать во всех браузерах
мой сценарий здесь
window.onload = function() {
getClockInformation();
}
function getClockInformation() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
updateClocks(this);
}
};
xhttp.open("GET", "http://localhost/clocks.xml", true);
xhttp.send();
}
файл clocks.xml находится в той же папке, что и html-страница ..
Да, но загружаете ли вы html-страницу с URL-адреса localhost, то есть http://localhost/file.html
нет, я просто дважды щелкаю по html, который открывается так: B: \ data \ clocks.html
Да, это заставляет его проверять CORS, поскольку URL-адрес file:/// считается другим доменом, чем http://localhost. Загрузите его с локального хоста, как будто вы XML-файл, т.е. http://localhost/file.html, и запрос будет работать.
в любом случае он может работать прямо из папки, так как он будет отправлен другим клиентам. он уже работает в FireFox, проблема в Chrome
since a file:/// url is considered a dfifferent domain - в Chrome ... Firefox не имеет этого ограничения, поскольку, как уже указывает OP, already working in Firefox


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите просто запустить его прямо с диска, вы не сможете использовать ajax в качестве Chrome, и, возможно, другие браузеры просто не разрешат загрузку URL-адресов file:///.
Вы можете обойти это, используя ввод файла или операцию перетаскивания, чтобы получить файл.
HTML
Select the clocks.xml file
<input type = "file" id = "xmlfile">
Javascript
var fileInput = document.querySelector("#xmlfile");
fileInput.addEventListener("change",function(e){
var file = fileInput.files[0];
var reader = new FileReader();
reader.onloadend = function(){
var data = reader.result;
//data will now contain the xml text
//use DOMParser to parse it
var xmlDocument = (new DOMParser()).parseFromString(data,"application/xml");
//then use the various element methods to get the elements you need
//for instance if you had a <clock> element
var clockData = xmlDocument.querySelector("clock").textContent
};
reader.readAsText(file);
})
В противном случае вам нужно будет настроить cors или загрузить как html, так и xml с вашего сервера.
Я добавил свой html в локальный домен, работает в Chrome, но не в IE.
Как вы загружаете html-файл прямо с диска? т.е. ваш браузер попадает на
file:///some/path/to/file.html? Вам нужно будет загрузить html-файл из того же домена, в вашем случаеhttp://localhost. Или настройте свой сервер для отправки соответствующих заголовков cors для вашего XML-файла.