Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№114-09-2010 23:49:47

questor
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 07-12-2004
Сообщений: 101
UA: Firefox 3.6

Непонятки с jQuery для Greasemonkey подгрузка скрипта с другого домена

Написал небольшой скрипт для 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, чтобы не гонять по сети лишний трафик?

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]