使用JQuery拦截HTTP事件

时间:2012-03-30 06:30:10

标签: javascript jquery

我有这个JQuery代码,但是我需要知道如何从所选的标签中实际获取URL。

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

我需要做的第一件事就是在加载过程中获取实际的URL。

接下来我可能需要做的是在加载事件发生之前实际捕获,我的意思是在加载图像或链接之前。另外,我需要修改将要执行的事件的网址,例如,img标记有src="/somewhere/image.png"我的意思是,这会导致GET /somewhere/image.png我可能需要将其更改为GET/otherplace/image.png

任何想法如何实现这些?

3 个答案:

答案 0 :(得分:1)

$(this).load()将在加载元素的内容后触发。因此,您可以通过执行$(this).attr("src")$(this).attr("href")来获取网址,但要阻止HTTP请求的发送已经太晚了。

AFAIK,使用现代浏览器,JavaScript无法阻止资产首先被加载。充其量,您可以通过更改src属性,在加载页面后更改图像和样式表。如果这样做,请确保$(this).load()不会进入无限循环。 (<a>链接不是问题。没有加载任何内容,因此只需更改href属性。)

答案 1 :(得分:0)

.attr('src')

http://api.jquery.com/attr/

答案 2 :(得分:0)

解决此问题的一种方法是使用外部资源的源代码进行虚拟链接/隐藏控件,一旦页面加载,您将完成所有此类控件,然后创建相应的html元素,更新src属性和然后将它附加到dom。

虚拟控制:

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

和javascript

$(document).ready(function()
{

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

    });

});

希望这有帮助。