>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Парсинг контента с удалённого ресурса в расширении (с выполнением JS) http://forum.mozilla-russia.org/viewtopic.php?id=67404 |
init > 22-05-2015 16:01:39 |
Всем привет! Суть проблемы: необходимо распарсить контент со страницы (по условиям задачи, никакое 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) чтобы собрать все нужные добавленные узлы? Или может я вообще не туда копаю и можно сделать как-то по другому? |
IVIAKC > 22-05-2015 17:26:23 |
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"); } } |
init > 22-05-2015 17:55:51 |
IVIAKC |
init > 22-05-2015 22:53:10 |
okkamas_knife пишет
Не, ну так тоже можно наверно. Но как-то это топорно немного получаеся. Хотелось как-то более "по фен шую" сделать :-) |