Страницы: 1
Написал небольшой скрипт для Greasemonkey, теперь вот задумался над тем, насколько он оптимально работает.
В чём суть. На некотором сайте site1.com находится страница, которую обрабатывает скрипт, на странице находится обычная html-таблица, в которой скрипт в первом столбце добавляет данные в зависимости от того, какие данные находятся во втором столбце. Условно: во втором столбце ссылки вида http://www.site1.com/page.php?id_page=123456, в первый столбец заносится число - количество товара на складе.
Наличие товара на складе - это сайт site2.com с отдельной mysql-базой.
Сам скрипт:
// @require http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js // ==/UserScript== $('h2.CommonTitle').next().find('td.FSubListLeft a.FtnNameUnRead').each( function() { var reg=/site1.org\/(\d*)\.aspx/; var id_t = reg.exec(this.href)[1]; $('<div style="display:inline;padding-left:20px;" id="t_'+id_t+'"></div>').appendTo($(this).parent()); var script = document.createElement('script'); script.setAttribute('src', 'http://site2.com/ajax/script1.js?id='+id_t); document.getElementsByTagName('head')[0].appendChild(script); });
т.п. просто вставляет пустой блок div, в который будет потом вставляться информация и подгружается скрипт (id тот же самый) с сайта site2.
Там в общем-то в script1.js тоже ничего сложного - в подготовленный div заносится некоторая информация:
if (!isset($_GET['id_t'])) {die();} else { $id_t = (int)$_GET['id_t']; } // выбираем из базы по id_t и выбираем какой символ показать echo " $('#t_".$id_t."').append('<span>х</span>'); ";
Всё это успешно работает, теперь захотелось навести порядок и красоту. Сначала хотел как-нибудь исхитриться с jsonp - но same origin не даёт никак. Потом обратил внимание вот на что. В script1.js первым делом ещё раз приходится инклудить jQuery - на самом сайте site1.com нету, а от @require (разово, при инсталляции скрипта) не работает, иначе эта строчка с созданием span перестаёт работать.
Тогда решил переписать по-старинке на чистом javascript в виде:
echo ' var t = document.getElementById(\'#t_'.$id_t.'\'); '; echo ' var ta = document.createTextNode(\''.$id_t.'\'); '; //echo ' alert(\'---\'+t+\'---\');' echo ' t.appendChild(ta);';
И подвох ожидал там, где я и не подумал бы - getElementById не может найти эти динамически сгенерированные div, firebug показывает что t is null.
Возникает вопрос - почему с использованием jQuery эти же элементы находятся, а без - нет? И - как отказаться от использования jQuery в скрипте script1.js, чтобы не гонять по сети лишний трафик?
Отсутствует
Страницы: 1