Собирать элементы DOM из внешних документов HTML - PullRequest
0 голосов
/ 29 апреля 2010

Я пытаюсь написать генератор отчетов для сбора комментариев пользователей из списка внешних файлов HTML. Пользовательские комментарии заключены в элементы .

Можно ли это сделать с помощью JavaScript?

Вот моя попытка:

function generateCommentReport()
{
    var files = document.querySelectorAll('td a'); //Files to scan are links in an HTML table
    var outputWindow = window.open(); //Output browser window for report

    for(var i = 0; i<files.length; i++){
        //Open each file in a browser window
        win = window.open();
        win.location.href = files[i].href;

        //Scan opened window for 'comment's
        comments = win.document.querySelectorAll('.comment');
        for(var j=0;j<comments.length;j++){
            //Add to output report
            outputWindow.document.write(comment[i].innerHTML);
        }
    }
}

Ответы [ 3 ]

1 голос
/ 29 апреля 2010

Вам нужно будет дождаться onload в целевом окне, прежде чем вы сможете читать содержимое из его документа.

Также, какой тип элемента comment? В общем, вы не можете поставить name на любой элемент. Хотя неизвестные атрибуты, такие как неуместное имя, можно игнорировать, вы не можете гарантировать, что браузеры будут учитывать их для getElementsByName. (На самом деле, большинство браузеров делают , а IE нет.) class может быть лучше?

0 голосов
/ 29 апреля 2010

Я думаю, у меня есть решение для этого.

var windows = [];
var report = null;

function handlerFunctionFactory(i,max){
    return function (evt){
        //Scan opened window for 'comment's
        var comments = windows[i].document.querySelectorAll('.comment');

        for(var j=0;j<comments.length;j++){
            //Add to output report
            report.document.write(comments[j].innerHTML);
        }
        if((i+1)==max){
            report.document.write("</div></body></html>");
            report.document.close();
        }
        windows[i].close();
    }
}

function generateReport()
{
    var files = document.querySelectorAll('td a'); //The list of files to scan is stored as links in an HTML table
    report = window.open(); //Output browser window for report

    report.title = 'Comment Report';
    report.document.open();
    report.document.write('<!DOCTYPE html PUBLIC"-// W3C//DTD XHTML 1.0 Transitional//EN"" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
        + '<html><head><title>Comment Report</title>'
        + '</head><body>');

    for(var i = 0; i<files.length; i++){
        //Open each file in a browser window
        win = window.open();
        windows.push(win)
        win.location.href = files[i].href;
        win.onload = handlerFunctionFactory(i,files.length);
    }
}
  1. Любые советы по рефакторингу приветствуются. Я не совсем уверен, что фабрика - лучший способ привязать обработчики загрузки к экземпляру, например.
  2. Это работает только в Firefox: (
0 голосов
/ 29 апреля 2010

Каждый просмотр веб-страниц работает в определенном и контролируемом рабочем пространстве на компьютере пользователя, где определенные вещи ограничены кодом, таким как файловая система - это стандарты безопасности, гарантирующие, что никакой вредоносный код из Интернета не попадет в вашу систему и не сохранит конфиденциальную информацию о фишинге в этом. Только способы веб-браузер разрешен, если доступ предоставлен явно пользователем.

But i can suggest you for Internet Application as

  - If List of commands is static then cache either by XML, Json or Cookies [it will store on user's system until it expires]
  - If dynamic then Ajax to retrieve it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...