Как загрузить весь HTML веб-страницы, используя JavaScript? - PullRequest
1 голос
/ 02 января 2012

Можно ли загрузить всю HTML веб-страницу, используя JavaScript с учетом URL?Я хочу разработать дополнение для Firefox для загрузки содержимого всех ссылок, найденных в источнике текущей страницы браузера.

update : URL-адреса находятся втот же домен

Ответы [ 4 ]

5 голосов
/ 02 января 2012

Это должно быть возможно сделать с помощью jQuery ajax.Javascript в расширении Firefox не подлежит перекрестному ограничению происхождения.Вот несколько советов по использованию jQuery в расширении Firefox:

  1. Добавьте библиотеку jQuery в каталог chrome / content / вашего расширения.

  2. ЗагрузитьJQuery в окне загрузки события обратного вызова, а не включение его в браузере наложения XUL.В противном случае это может привести к конфликтам (например, заклинивает пользовательскую панель инструментов).

    (function(loader){ 
    loader.loadSubScript("chrome://ryebox/content/jquery-1.6.2.min.js"); })
    (Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader));
    
  3. Используйте «jQuery» вместо «$».Я испытал странное поведение при использовании $ вместо jQuery (какой-то конфликт, я полагаю)

  4. Использование jQuery (content.document) вместо jQuery (документ) для доступа к DOM страницы.В расширении Firefox «документ» относится к XUL браузера, а «content.document» относится к DOM страницы.

Я написал расширение Firefox для получения закладок с сайта закладок моего друга.Он использует jQuery для извлечения моих закладок в ответе JSON из своего сервиса, а затем создает меню этих закладок, чтобы я мог легко получить к ним доступ.Вы можете просмотреть источник на https://github.com/erturne/ryebox

1 голос
/ 02 января 2012

Вы можете выполнить XmlHttpRequests (XHR`s), если схема комбинирования: // домен: порт одинакова для страницы, содержащей JavaScript, который должен извлекать HTML.

Многие JS-фреймворки предоставляют вам простую поддержку XHR, Jquery, Dojo и т. Д. Пример использования DOJO:

function getText() {
  dojo.xhrGet({
    url: "test/someHtml.html",
        load: function(response, ioArgs){
      //The repsone is the HTML
      return response;
    },
    error: function(response, ioArgs){
      return response;
    },
    handleAs: "text"
  });
}

Если вы предпочитаете писать собственный обработчик XMLHttpRequest, посмотрите здесь: http://www.w3schools.com/xml/xml_http.asp

1 голос
/ 02 января 2012

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

Однако, как указали Макс и Эртурн в комментариях, когда JavaScript пишется как часть расширения / надстройки для браузера, обычные правила, касающиеся политики одного и того же источника и междоменных запросов, похоже, не применяются - по крайней мере, не для Firefox и Chrome. Поэтому использование JavaScript для загрузки страниц должно быть возможным с использованием XMLHttpRequest или с использованием некоторых методов-оболочек, включенных в вашу любимую JS-библиотеку.

Если вы предпочитаете, чтобы я предпочитал jQuery, вы можете взглянуть на метод jQuery .load () , который загружает HTML из заданного ресурса и вставляет его в указанный вами элемент.

Edit: Внесены некоторые изменения в мой ответ на основе комментариев о междоменных запросах, сделанных надстройками.

0 голосов
/ 02 января 2012

если вы пишете только текстовый загрузчик веб-страниц своим умом и знаете только html и javascript, вы можете написать имя загрузчика "download.hta" с html и javascript для управления Msxml2.ServerXMLHTTP.6.0 и FSO

...