Консультация № 177754
09.04.2010, 00:01
43.38 руб.
0 7 1
Добрый вечер, уважаемые эксперты! Помогите, пожалуйста, с JavaScript.
Нужно написать html файл в котором будет JavaScript который будет делать следующие действия:

Вывести список содержимого свойств выбранной гиперссылки в указанном фрейме.

Заранее большое спасибо!!!

Обсуждение

Неизвестный
09.04.2010, 16:53
общий
это ответ
Здравствуйте, Бондаренко Кирилл Андреевич.
Скорее наверное нужно создать js файл, который будет подгружаться в html и выводить список содержимого свойств выбранной гиперссылки.
Если такой вариант устроит, то во вложении скрипт. Если положить в корень localhost, то можно будет активировать на любой странице таким вот букмарклетом
[url=javascript:(function(){var z=document.body.appendChild(document.createElement('script'));z.language='javascript';z.type='text/javascript';z.src='http://localhost/linkinfo.js';})();]Букмарклет[/url]
В теге code, если парсер испортит:
Код:
javascript:(function(){var z=document.body.appendChild(document.createElement('script'));z.language='javascript';z.type='text/javascript';z.src='http://localhost/linkinfo.js';})();


Приложение:
var descr=function(o)
{
var ro=document.createElement('div');
ro.style.paddingLeft='1em';
var cc=0;
for(a in o)
{
var el=o[a];
if(typeof(el)!='undefined' && el!=null)
{
cc++;
var ri=document.createElement('div');
ro.appendChild(ri);
if((cc&1)==1)ri.style.backgroundColor='#FFEEFF';
ri.textContent=a+':'+typeof(el);
if(typeof(el)=='number')ri.textContent=a+':number= '+el;
if(typeof(el)=='string')ri.textContent=a+':string= "'+el+'"';
if(typeof(el)=='object')
{
if(el.prototype && (el.prototype==Array))ri.textContent=a+':array['+el.length+']';
else ri.textContent=a+':object='+el.toString();
}
if(typeof(el)=='function')ri.textContent=a+':function='+el.toString();
}

}
return ro;
}

var do_link_info=function(el)
{
var ddiv=descr(el);
ddiv.style.overflow='auto';
ddiv.style.height='300px';
ddiv.style.width='800px';
var odiv=document.createElement('div');
odiv.appendChild(ddiv);
odiv.style.position='fixed';
odiv.style.left='10px';
odiv.style.top='10px';
odiv.style.backgroundColor='white';
odiv.style.border='1px solid gray';
var btn=document.createElement('input');
btn.setAttribute('type','button');
btn.setAttribute('value','close');
btn.onclick=function(event){odiv.parentNode.removeChild(odiv);};
btn.div_node=odiv;
odiv.appendChild(btn);
document.body.appendChild(odiv);

}

for(var k=0;k<e.length;k++)
{
e[k].onclick=function(event){event.preventDefault();event.stopPropagation();do_link_info(this);return false;};
}
alert("Now you can click any link on the page to view it's properties.");
})();
5
Огромное спасибо. Пуду пытаться запустить
Неизвестный
11.04.2010, 16:48
общий
Я не селен в JavaScript. Подскажите, пожалуйста, как оно работает, и как этим воспользоваться.
Заранее спасибо.
Неизвестный
12.04.2010, 09:41
общий
Бондаренко Кирилл Андреевич:
Чтобы испытать в действии, нужно сделать в браузере закладку со ссылкой
Код:
javascript:(function(){var z=document.body.appendChild(document.createElement('script'));z.language='javascript';z.type='text/javascript';z.src='http://localhost/linkinfo.js';})();

приложенный к ответу файл положить в корень локалхоста (у вас же установлен локальный web-сервер?) под именем linkinfo.js, загрузить какую-нибудь страничку и активировать закладку.
После этого на каждую ссылку в документе будет навешен обработчик onclick, который можно вызвать, щелкнув по ссылке. Обработчик выведет окно со свойствами ссылки, что и требовалось в исходном вопросе.
давно
Профессор
230118
3054
28.04.2010, 15:14
общий
vladisslav:
Ниоткуда не следует, что установлен локальный web-сервер. Для того, чтобы писать JavaScript, сервер не нужен. Не проще ли включить js в html?
Неизвестный
28.04.2010, 15:45
общий
Гаряка Асмик:
Мой вариант подходит для абсолютно любой страницы. Например для главной яндекса, в которую мы не сможем включить произвольный javascript путем редактирования.
Если есть возможность отредактировать html файл, то можно просто добавить туда тег script с содержимым из вложения или соответствующим атрибутом src.
Если нет локального веб сервера (а он должен быть у веб разработчика), то можно указать в букмарклете локальный адрес по протоколу file:
то есть заменить http://localhost/linkinfo.js на file:///путь_к_файлу_с_javascript
Но такой вариант у меня не заработал.
Букмарклет со ссылкой по http: работает например на этой странице.
давно
Профессор
230118
3054
28.04.2010, 17:11
общий
vladisslav:
Это очень здорово, но автору вопроса это не требовалось.
Неизвестный
28.04.2010, 17:25
общий
Гаряка Асмик:
В виде html файла будет так как-то.
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd"><html><head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title>question 177754</title>
</head><body>
<a href='/'>link</a>
<script type='text/javascript'>
var descr=function(o)
{
var ro=document.createElement('div');
ro.style.paddingLeft='1em';
var cc=0;
for(a in o)
{
var el=o[a];
if(typeof(el)!='undefined' && el!=null)
{
cc++;
var ri=document.createElement('div');
ro.appendChild(ri);
if((cc&1)==1)ri.style.backgroundColor='#FFEEFF';
ri.textContent=a+':'+typeof(el);
if(typeof(el)=='number')ri.textContent=a+':number= '+el;
if(typeof(el)=='string')ri.textContent=a+':string= "'+el+'"';
if(typeof(el)=='object')
{
if(el.prototype && (el.prototype==Array))ri.textContent=a+':array['+el.length+']';
else ri.textContent=a+':object='+el.toString();
}
if(typeof(el)=='function')ri.textContent=a+':function='+el.toString();
}

}
return ro;
}

var do_link_info=function(el)
{
var ddiv=descr(el);
ddiv.style.overflow='auto';
ddiv.style.height='300px';
ddiv.style.width='800px';
var odiv=document.createElement('div');
odiv.appendChild(ddiv);
odiv.style.position='fixed';
odiv.style.left='10px';
odiv.style.top='10px';
odiv.style.backgroundColor='white';
odiv.style.border='1px solid gray';
var btn=document.createElement('input');
btn.setAttribute('type','button');
btn.setAttribute('value','close');
btn.onclick=function(event){odiv.parentNode.removeChild(odiv);};
btn.div_node=odiv;
odiv.appendChild(btn);
document.body.appendChild(odiv);

}

for(var k=0;k<e.length;k++)
{
e[k].onclick=function(event){event.preventDefault();event.stopPropagation();do_link_info(this);return false;};
}
alert("Now you can click any link on the page to view it's properties.");
})();</script></body></html>

С другой стороны оценка автора вопроса показывает, что он вроде бы удовлетворен ответом. Может быть он сообщит о результатах и если такой вариант его более устраивает, попросит модераторов исправить ответ, если конечно он еще читает форум.
Форма ответа