Всем привет!

Суть проблемы: необходимо распарсить контент со страницы (по условиям задачи, никакое API не доступно, приходится парсить то, что сайт отдаёт обычному пользователю). Если речь идёт о статичном контенте, то проблемы нет, вот этот код справляется на ура:

скрытый текст

Выделить код

Код:

var getRemoteDocument = function(url) {
    var remoteDoc = null;
    try {
        var request  = new XMLHttpRequest();
        request.open('GET', url, false);  
        request.setRequestHeader("Content-Type", "text/html");
        request.send(null);
        var responseHTML = request.responseText;
        remoteDoc = new DOMParser().parseFromString(responseHTML, "text/html");
    } catch(e) {
        handleError(e);
    }
    return remoteDoc;
};
var thatDoc = getRemoteDocument("http://remote-site.domain/url/");


Проблема в том, что сейчас все больше сайтов исопльзует AJAX и контент туда подгружается через скрипты (тот же document.appendChild(), например). Так вот эти скрипты естественно не работают, потому что выполняются в контексте chrome, и механизм безопасности просто не позволит такое сделать как оно и должно быть.

Возможное решение: Есть такая штука песочница, где эти скрипты можно безопасно исполнять. Вроде как получается, что нужно создать свой объект window, к которому ранее полученный thatDoc будет привязан, а уже в его контексте будут выполняться скрипты, для которых он и будет виден как document. Но вот чего я не могу понять, так это как туда засунуть документ, к которому они должны применяться и как потом оттуда этот контент получить, грубо говоря в каком контексте вызывать тот же .querySelectorAll(mySelector) чтобы собрать все нужные добавленные узлы?

Или может я вообще не туда копаю и можно сделать как-то по другому?

init
а так не подходит?

Выделить код

Код:

Run: function(event, type)
    {
        var url= "site.com";                
        window.content.document.location = url;        
        setTimeout( this.ParsePage.bind(this), 1000 );
    },
    ParsePage: function(){
        var doc = window.content.document;
        if(doc != null) {
            var res = doc.getElementById("tagid");
        }
    }

IVIAKC
Насколько я понимаю это заменит содержимое текущей вкладки браузера. А мне нужно как-то в фоне это сделать, как бы отдельным потоком. Желательно без открытия каких-либо видимых окон или вкладок вообще.

okkamas_knife пишет

просто тупо открывай во вкладке а саму вкладку скрой стилем чтоб не мешалась.ну и добавь автооткрытие пустой если закрывается предпоследняя вкладка чтоб ту не было видно.

Не, ну так тоже можно наверно. Но как-то это топорно немного получаеся. Хотелось как-то более "по фен шую" сделать :-)