Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.11.2018, 21:53
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Как получить содержимое файла xml по урлу
Зная урл-адрес файла с расширением xml можно ли получить его содержимое при помощи JavaScript (не на сервер Node.JS, а из браузера) ?

К какой технологии мне обратится чтобы получить содержимое из файла?

Пробую через XMLHttpRequest - консоль светит ошибкой на этот метод и кроме статуса ответа ничего нет.

Я вот так пробую:
var xhr = new XMLHttpRequest();
xhr.open("GET", urlxml, true);
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
        console.log('Подключился');
        console.log(xhr.responseText); // Пустой
    }
}
xhr.send();


Скрин с console.log(xhr) прилагаю
Изображения:
Тип файла: jpg 2018-11-29_204710.jpg (10.5 Кб, 6 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2018, 23:58
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Текст ошибки какой?
Ответить с цитированием
  #3 (permalink)  
Старый 30.11.2018, 02:10
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

fetch('page.xml').then(data => data.text()).then(data => console.log(data));

но если у вас там Заголовок CORS 'Access-Control-Allow-Origin' отсутствует или подобное, то борода
Ответить с цитированием
  #4 (permalink)  
Старый 30.11.2018, 02:38
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Nexus
Текст ошибки какой?
Что то типа "браузер блокирует метод XMLHttpRequest..." (это в гугл хроме).

Сообщение от j0hnik
то борода
А нет никакого способа вытянуть данные из файла xml ?

Я пишу расширение для гугл-хрома. Из активной вкладки браузера получаю основной урл сайта и добавляю к нему нужный путь.
Пример запрашиваемого файла: https://www.joomla.org/language/en-GB/install.xml
Я там хочу вытянуть значение из тега version.
Никак нельзя получить это значение?
Ответить с цитированием
  #5 (permalink)  
Старый 30.11.2018, 02:50
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

MC-XOBAHCK,
fetch('https://www.joomla.org/language/en-GB/install.xml').then(data => data.text()).then(data =>{
	console.log(document.createRange().createContextualFragment(data).querySelector('version').innerHTML);
});

если нужен только version и с документом больше работать не нужно, можно так
fetch('https://www.joomla.org/language/en-GB/install.xml').then(data => data.text()).then(data =>{
	console.log(data.match(/<version>(.+)<\/version>/)[1]);
});

Последний раз редактировалось j0hnik, 30.11.2018 в 03:33.
Ответить с цитированием
  #6 (permalink)  
Старый 30.11.2018, 03:38
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

j0hnik,
получается в консоле ошибка:
Цитата:
Access to fetch at 'https://www.joomla.org/language/en-GB/install.xml' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
гугл транслит:
Цитата:
Доступ к выборке на 'https://www.joomla.org/language/en-GB/install.xml' из источника «null» был заблокирован политикой CORS: нет заголовка «Access-Control-Allow-Origin» на запрошенный ресурс. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors» для извлечения ресурса с отключенным CORS.
Не знаете, это можно победить?

Ваш код вставил так как вы его привели, только урл подставил. Ставил и в расширение и просто в файл html. Никаких обёрток не делал.

Нашёл синтаксис https://learn.javascript.ru/fetch#sintaksis
Исправил так:
fetch('https://www.joomla.org/language/en-GB/install.xml'[, 'no-cors']).then(data => data.text()).then(data =>
                console.log(document.createRange().createContextualFragment(data).querySelector('version').innerHTML)
            );

В консоле ошибка:

Цитата:
Uncaught SyntaxError: Unexpected token ,
на запятую ругается. Может это в учебнике опечатка, где пример синтаксиса? Или я накосорезил?
Ответить с цитированием
  #7 (permalink)  
Старый 30.11.2018, 03:42
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

MC-XOBAHCK,
зашел на https://www.joomla.org/
запустил в консоле код пятого поста, работает и тот и другой

[, 'no-cors'] - лишнее
Ответить с цитированием
  #8 (permalink)  
Старый 30.11.2018, 04:17
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

j0hnik,
Спасибо вам за помощь. Не получается у меня. В консоле там на сайте да, отрабатывает и показывает версию.

Из моего расширения для браузера гугл-хром или из хтмл файла на локалке - не хочет. Всё туже ошибку с CORS policy даёт. Похоже нельзя вытянуть это значение внешним скриптом - безопасность.

В расширении для гугл-хрома я ваш код поместил внутри:
document.addEventListener('DOMContentLoaded', () => {

    chrome.tabs.getSelected(null, function (tab) {
        // здесь код поставил
    });

});

Это иконка в меню гугл-хрома при клике по которой появляется всплывающее окно.
Буду рыться в API гугловских, может где из другого места можно получить это значение. Но подозреваю что они заблочили такие возможности.
Ответить с цитированием
  #9 (permalink)  
Старый 30.11.2018, 05:34
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Во первых попробуй запрос из background скрипта, вроде там ограничений нет.
Во вторых попробуй поставить permission на <all_urls>.

Вот микрорасширение, показывающее отсутствие принципиальных проблем. При заходе на www.joomla.org пишет версию в консоль.
Пример: manifest.json
{
  "name": "joomla",
  "version": "1",
  "manifest_version": 2,
  "content_scripts": [
    {
      "matches": ["*://*.joomla.org/*"],
      "js": ["content.js"]
    }
  ]
}
Пример: content.js
const xhr = new XMLHttpRequest();
xhr.open("GET", 'https://www.joomla.org/language/en-GB/install.xml', true);
xhr.onload = () => console.log(
	'Версия',
	xhr.responseXML.querySelector('version').textContent
); 
xhr.send();
__________________
29375, 35

Последний раз редактировалось Aetae, 30.11.2018 в 05:57.
Ответить с цитированием
  #10 (permalink)  
Старый 30.11.2018, 06:22
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Aetae,
Спасибо! Так работает. Я начал искать и неправильно в манифесте скрипт подключил:
"background": {
    "scripts": ["background.js"],
    "persistent": false
  }

Думаю теперь смогу доработать скрипт как мне нужно.

Пользуясь случаем, не подскажете как в манифесте подключить скрипт для контекстного меню в браузере? Я в документации нашёл как создавать пункты меню и привязывать к ним функции (там куча методов я ознакамливаюсь), но там нет из какого скрипта запускать. Я куда не пробовал всунуть, у меня заработало только в popup, но это не то, так как пункт появляется в меню только после клика по иконке расширения в меню хрома.

Смотрю https://developer.chrome.com/extensions/manifest и ничерта не вижу. Наверное пора спать...

Последний раз редактировалось MC-XOBAHCK, 30.11.2018 в 06:40.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить свойсвто объекта? Armen Общие вопросы Javascript 4 19.10.2014 06:45
Как получить содержимое элемента вместе с самим элементом? Shitbox2 jQuery 5 26.12.2012 16:18
Как получить имя текущего файла Andrey_szr Элементы интерфейса 3 08.10.2012 10:18
как получить содержимое элемента? Esigns Events/DOM/Window 2 27.09.2012 15:11
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17