Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.05.2008, 11:55
Новичок на форуме
Отправить личное сообщение для Leonline Посмотреть профиль Найти все сообщения от Leonline
 
Регистрация: 23.05.2008
Сообщений: 6

Как выдернуть ссылки из фрейма
Помогите разобраться, есть html страница
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>TEST</title>
</head>
<script language="javascript" src="test.js"></script>
</html>
файл тест содержит
Код:
document.write('<frameset frameborder="0" framespacing="0" border="0" rows="100%,*" noresize><frame id="fr" src="http://site.ru/test.php" noresize></frameset>');
какой код нужно добавить в файл test.js чтоб после загрузки фрейма внизу страницы выводились все ссылки каторые присутствуют в фрейме. Пробовал так
Код:
for (var i = 0; i < document.links.length; i++) {
		document.write(document.links[i]+'<br>');
}
работает только если вставить код в тело фрейма а мне оч нужно чтоб код был в файле test.js

Последний раз редактировалось Leonline, 27.05.2008 в 11:40.
Ответить с цитированием
  #2 (permalink)  
Старый 24.05.2008, 01:52
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Внизу какой страницы? Основной, или загруженной во фрейм? Насколько я понимаю, страница с фреймами (не плавающими iframe) не может содержать ничего, кроме этих фреймов. Если дописывать надо во фрейм, то делать надо следующим образом. Нужно "взять" этот фрейм из DOM, собрать элементы <a> из него (обращаясь к документу через contentDocument или contentWindow). Но обратите внимание, что если фрейм будет подгружать страницу с домена, отличного от того, где находится сам файл в фреймом, ничего работать не будет. К сожалению, не могу сейчас проверить код на работоспособность, но ход мысли должен быть понятен:
var frame = document.getElementById("fr");
var frameDoc = frame.contentDocument && frame.contentWindow.document;
var links = frameDoc.getElementsByTagName("a");
for(var i in links)
{
   var link = links[i].getAttribute("src") && links[i].src;
   frameDoc.write(link);
}

Код должен быть запущен после полной загрузки фрейма, иначе нечего будет искать. Этого можно добиться, поставив его выполнение на событие onLoad элемента <frame>.

Последний раз редактировалось Андрей Параничев, 26.05.2008 в 12:24.
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2008, 02:45
Новичок на форуме
Отправить личное сообщение для Leonline Посмотреть профиль Найти все сообщения от Leonline
 
Регистрация: 23.05.2008
Сообщений: 6

IE выдает такую ошибку
frameDoc - есть NULL или не является объектом

ставишь выполнение на событие onLoad элемента <frame>
Код:
function f() {

var frame = document.getElementById("fr");
var frameDoc = frame.contentDocument && frame.contentWindow;
var links = frameDoc.getElementsByTagName("a");

for(var i in links) {

   var link = links[i].getAttribute("src") && links[i].src;
   frameDoc.write(link);
}
}

document.write('<frameset frameborder="0" framespacing="0" border="0" rows="100%,*" noresize><frame onload="f()" name="fr" id="fr" src="http://site.ru/test.php" noresize></frameset>');
то выдает ошибку что объект неподдерживает это свойство или метод
может ссылки можно выдернуть с помощью регулярки, тем более что задача соостоит не втом чтоб вывести их на экран а втом что нужно перенаправить юзера по первой ссылке из фрейма

Последний раз редактировалось Leonline, 26.05.2008 в 02:59.
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2008, 12:25
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Leonline,
Сайт во фрейме и основной сайт находятся на одном домене?
Попробуйте так, я просто опечатался:
var frameDoc = frame.contentDocument && frame.contentWindow.document;

Я еще ближе к вечеру посмотрю, может пойму в чём проблема.
Ответить с цитированием
  #5 (permalink)  
Старый 27.05.2008, 11:26
Новичок на форуме
Отправить личное сообщение для Leonline Посмотреть профиль Найти все сообщения от Leonline
 
Регистрация: 23.05.2008
Сообщений: 6

Сайт во фрейм загружается с другого домена.

Попробовал так
Код:
var frameDoc = frame.contentDocument && frame.contentWindow.document;
к сожалению таже самая ошибка, IE выдает что объект неподдерживает это свойство или метод
Ответить с цитированием
  #6 (permalink)  
Старый 27.05.2008, 11:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Leonline
Сайт во фрейм загружается с другого домена.
Тогда можете сразу оставить свою затею, браузер в любом случае не даст доступа к фрэйму, загруженному с другого домена.
Ответить с цитированием
  #7 (permalink)  
Старый 27.05.2008, 12:46
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Leonline,
Я в коде опечатался дважды правильно было бы вот так:
var frameDoc = frame.contentDocument || frame.contentWindow.document;


Но это всё равно не поможет, если ифейм подгружает сайт с другого домена - политика безопасности запрещает документам с разных доменов "общаться" между собой.
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2008, 10:20
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

frame.contentDocument - это для кого?
__________________
.ня
Ответить с цитированием
  #9 (permalink)  
Старый 31.05.2008, 00:30
Новичок на форуме
Отправить личное сообщение для Leonline Посмотреть профиль Найти все сообщения от Leonline
 
Регистрация: 23.05.2008
Сообщений: 6

Сообщение от tenshi Посмотреть сообщение
frame.contentDocument - это для кого?
Андрей Параничев уже написал что если конткнт во фрейм загружается с другого сайта то выдернуть с него ссылки неполучится. Если вы считаете что можно то покажите конкретным примером. Мне нужен массив ссылок и фрейма id="fr", на странице он единственный.
Заранее благодарен.

Последний раз редактировалось Leonline, 31.05.2008 в 00:33.
Ответить с цитированием
  #10 (permalink)  
Старый 31.05.2008, 01:34
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

tenshi,
Сообщение от tenshi
frame.contentDocument - это для кого?
Для старых Opera, если я не ошибаюсь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высота фрейма и высота загружаемого файла findman Events/DOM/Window 5 15.09.2008 03:33
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 16:01
Раскрывающееся меню, как переставить на другую сторону? Resager Events/DOM/Window 8 22.08.2008 21:56
Не подскажите, как убрать подчеркивание ссылки href? Forgott Общие вопросы Javascript 1 20.05.2008 11:47
Как запретить уход из фрейма в top-окно? sturm Общие вопросы Javascript 6 20.04.2008 04:20