我有这个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
任何想法如何实现这些?
答案 0 :(得分:1)
$(this).load()
将在加载元素的内容后触发。因此,您可以通过执行$(this).attr("src")
或$(this).attr("href")
来获取网址,但要阻止HTTP请求的发送已经太晚了。
AFAIK,使用现代浏览器,JavaScript无法阻止资产首先被加载。充其量,您可以通过更改src
属性,在加载页面后更改图像和样式表。如果这样做,请确保$(this).load()
不会进入无限循环。 (<a>
链接不是问题。没有加载任何内容,因此只需更改href
属性。)
答案 1 :(得分:0)
.attr('src')
答案 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))
});
});
希望这有帮助。