Чтение document.links из IFrame - PullRequest
0 голосов
/ 25 июля 2011

EDIT: Просто быстрое упоминание о природе этой программы. Цель этой программы для веб-инвентаря. Рисование различных ссылок и другого контента в виде иерархии. У меня проблемы с получением списка ссылок с веб-страницы в IFrame.


У меня такое чувство, что этот сильно укусит меня. (другие сообщения указывают на актуальность элементов управления xss и домена)

Я просто пробую что-то с javascript и Iframes. По сути, у меня есть панель с IFrame, которая идет на любой веб-сайт, который вы хотите. Я пытаюсь создать список ссылок с веб-страницы в Iframe. Его только для чтения.

И все же я продолжаю сталкиваться с проблемой отказа в разрешении.

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

Однако я не думаю, что это сработает, если я пытаюсь перейти с сайта на сайт.

Вот код, который у меня есть, довольно простой:

function getFrameLinks()
{
/* You can all ignore this. This is here because there is a frame within a frame. It should have no effect ont he program. Just start reading from 'contentFrameElement'*/


//ignore this
var functionFrameElem = document.getElementById("function-IFrame");
console.log("element by id parent frame ");
console.log(functionFrameElem);
var functionFrameData = functionFrameElem.contentDocument;
console.log("Element data");
console.log(functionFrameData);

//get the content and turn it into a doc
var contentFrameElem = functionFrameData.getElementById("content-Frame")
console.log(contentFrameElem);
var contentFrameData = contentFrameElem.contentDocument;
console.log(contentFrameData);

//get the links
//var contentFrameLinks = contentFrameData.links;
var contentFrameLinks = contentFrameData.getElementsByTagName('a');

Цель: ОК, так как это незаконно и очень похоже на XSS. Возможно, кто-то может указать решение относительно того, как локально хранить документ. Кажется, у меня нет проблем с доступом к документу и ссылкам с внутренними страницами во фрейме.

Возможно, какая-то временная база данных кеша. Чем проще решение, тем лучше.

Ответы [ 3 ]

0 голосов
/ 25 июля 2011

Вот букмарклет, который вы можете запустить на любой странице (при условии, что ссылки не в фрейме)

javascript:var x=function(){var lnks=document.links,list=[];for (var i=0,n=lnks.length;i<n;i++) {var href = lnks[i].href;  list.push(href)};if (list.length>0) { var w=window.open('','_blank');w.document.write(list.length+' links found<br/><ul><li>'+list.sort().join('</li><li>')+'</ul>');w.document.close()}};void(x());

другой способ для вас (в Windows) - сохранить ваш HTML с расширением .HTAТогда вы можете захватить все, что живет в iFrame

0 голосов
/ 25 июля 2011

Возможно, вас заинтересует использование YQL ( Yahoo Query Language ) для получения отфильтрованных результатов с удаленных URL-адресов.

пример получения всехссылки с домена yahoo.com

0 голосов
/ 25 июля 2011

Если вы хотите прочитать это только для себя и в своем браузере, вы можете написать простой прокси с php на вашем сервере. самый простой код:

<?php /* proxy.php */ readfile($_GET['url']); ?>

теперь установите ваш iframe src на ваш прокси-файл:

<iframe src="http://localhost/proxy.php?url=http://www.google.com"
id="function-IFrame"></iframe>

теперь вы можете получить доступ к содержимому iframe с вашего (локального) сервера. если вы хотите установить URL с помощью программы, не забудьте закодировать URL (urlencode в php или encodeURIComponent в js)

...