2012-03-30 3 views
3

У меня есть этот JQuery-код, однако мне нужно знать, как реально получить URL-адрес из выбранных тегов.Перехват HTTP-события с использованием JQuery

$("link, script, style, a, img").each(function() { 
    $(this).load(function() { 
     // get the URL and log it 
     console.log("Intercepted HTTP Event"); 
    }); 
}); 

Первое, что мне нужно сделать, чтобы получить фактический URL-адрес во время загрузки.

Следующее, что мне может понадобиться - это фактически поймать до того, как произойдет событие загрузки, я имею в виду, например, перед загрузкой изображения или ссылки. Кроме того, мне нужно изменить URL события, которое будет выполняться, например, img тег имеет src="/somewhere/image.png" я имею в виду, это вызовет GET /somewhere/image.png я, возможно, потребуется изменить его GET/otherplace/image.png

Любые идеи, как для того чтобы достигнуть любой из эти?

+0

Вопрос, почему бы не использовать mod_rewrite? Ограничение хоста? –

+0

Не совсем, я не переписываю конкретный прокси. Мне нужно проверить, как эта страница работает на клиенте, прежде чем она что-либо сделает на стороне сервера ... –

+0

Затем используйте mod_rewrite в своей машине разработки. – kijin

ответ

1

$(this).load() будет срабатывать после содержимого элемента был загружен. Таким образом, вы можете получить URL-адрес, выполнив $(this).attr("src") или $(this).attr("href"), но уже слишком поздно, чтобы HTTP-запросы не прекращались.

AFAIK, с современными браузерами, для JavaScript не существует возможности для того, чтобы предотвратить загрузку активов. В лучшем случае вы можете изменить изображения и таблицы стилей после загрузки страницы, изменив атрибуты src. Если вы это сделаете, убедитесь, что $(this).load() не входит в бесконечный цикл. (<a> ссылки не являются проблемой. Ничего не загружено, поэтому просто измените атрибут href.)

+0

Благодарим за ответ. Причина, по которой мне нужно поймать события, - это то, что HTTP-событие, подобное GET /something.png, генерируется другим javascript на странице. –

0

Одним из способов решения этой проблемы было бы иметь некоторые фиктивные ссылки/скрытые элементы управления с источником вашего внешнего ресурса и один раз страница загружает вас через все такие элементы управления, а затем создает соответствующие элементы html, обновляет атрибут src и затем добавляет его в dom.

пустышки Controls:

<input type="hidden" source="/my/source/a.jpg" nodeType="img" class="specialControls"/> 
<input type="hidden" source="/my/source/1.js" nodeType="script" class="specialControls" /> 

и яваскрипта

$(document).ready(function() 
{ 

    $(".specialControls").each(function(){ 
     var elementType=$(this).attr("nodeType"); 
     $('<'+elementType+'/>').attr('src', $(this).attr("source")) 
          .insertAfter($(this)) 

    }); 

}); 

Надежда это помогает.

Смежные вопросы