Устранение подобных проблем, поэтому лучше избегать создания JavaScript-in-HTML динамически в строках. Также нельзя использовать схему псевдо-URL javascript:
.
Вместо этого рассмотрит «ненавязчивые сценарии» подход: перенос данных из встроенной строки JS и в обычные атрибуты, такой как class
или, если ссылка соответствует конкретному элементу на странице, то href
себя:
<a class="gallerylink" href="#Business">Link</a>
for (var i= document.links.length; i-->0;) {
if (document.links[i].className==='gallerylink') {
document.links[i].onclick= function() {
clientGalleryLink(this.hash.substring(1));
return false;
};
}
}
Второй пример:
html += "<option value='javascript:clientGalleryLink(" + titleArray[x] + ")'>" + titleArray[x] + "</option>";
это просто беспорядок. Помимо недостатка \'
, ссылающегося на значение titleArray, а также отсутствие HTML-экранирования или JS-string-literal-escaping на titleArrays (так что если у вас есть '"<&
символов в заголовке, у вас есть проблемы).
Ожидаете ли вы, что сценарий будет выполнен, если этот параметр выбран только потому, что вы положили его в value
? Это не так.
Лучше использовать объекты DOM, чем пытаться помешать JavaScript внутри HTML внутри JavaScript внутри HTML. Например, если вы ищете поле выбора, который вызывает clientGalleryLink
каждый раз, когда выбранный вариант изменен:
<div id="PlaceWhereYouWantToPutTheSelectBox"></div>
<script type="text/javascript">
var s= document.createElement('select');
for (var i= 0; i<titleArray.length; i++) {
s.options[i]= new Option(titleArray[i], titleArray[i]);
}
s.onchange= function() {
clientGalleryLink(this.options[this.selectedIndex].value);
};
document.getElementById('PlaceWhereYouWantToPutTheSelectBox').appendChild(s);
</script>
Нет некрасивой миновать необходимости, не межсайтовые-сценариев дыры в безопасности.
ваши два фрагмента не совпадают. один - '', а другой -'