|
|
|
|
|
悲催的聲明:
由于騰訊也采用了防盜鏈技術(shù),本文方法已經(jīng)失效了!
當(dāng)我們想在文章里引用某張圖片時(shí),如果對(duì)方設(shè)置了防盜鏈,我們看到的將是404或forbidden或其他圖片,而不是想要的那張圖片,為此,我們有無方法進(jìn)行“反防盜鏈”呢?答案是有的,本文將介紹一個(gè)對(duì)付圖片防盜鏈的方法,經(jīng)測試有效。
舉例說明,比如卡卡網(wǎng)站速度診斷的圖片是防盜鏈的,圖片引用的代碼是:
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg">
我們看到的不是原圖,而是其他的圖片。
我們可以把圖片引用代碼改為:
<img src="http://read.html5.qq.com/image?imageUrl=http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
這樣就可以正常顯示自己想要的圖片了。
上述方法很簡單,就是采用第三方接口來獲取圖片,格式是:
<img src="http://read.html5.qq.com/image?imageUrl=圖片地址" >
一些人問到,對(duì)方最近才設(shè)置圖片反盜鏈,但我已經(jīng)發(fā)布了大量的文章,我豈不是要重新編輯文章,更改每個(gè)圖片地址?這顯然是不實(shí)際的。我現(xiàn)在要告訴你的是,沒關(guān)系,我們網(wǎng)頁可以通過一個(gè)JS程序,批量更改圖片地址。我們要做的,只是更改一下文章頁模版,引入一個(gè)反防盜鏈的JS文件,就可以了。
說了這么多,這個(gè)JS代碼是怎樣的呢?我們可以通過如下例子來了解。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Content-Language" content="zh-CN" />
<title>反防盜鏈實(shí)例_卡卡網(wǎng) webkaka.com</title>
</head>
<body>
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
<script type="text/javascript">
function showForbiddenImg(){
var obj=document.getElementsByTagName('img');
for(var i=0;i<obj.length;i++){
if(obj[i].getAttribute('src')){
obj[i].setAttribute('src','http://read.html5.qq.com/image?imageUrl='+obj[i].getAttribute('src'));
}
}
}
showForbiddenImg();
</script>
</body>
</html>
這個(gè)代碼很簡單,它的作用是遍歷網(wǎng)頁所有圖片,并在圖片地址前面加上指定字符串。當(dāng)然了,在實(shí)際應(yīng)用中,不可能需要遍歷網(wǎng)頁所有圖片,只需遍歷文章里的圖片即可,這需要自己更改一下這個(gè)js代碼。
我們可以通過JQuery來實(shí)現(xiàn)此功能,請(qǐng)看如下實(shí)例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Content-Language" content="zh-CN" />
<title>反防盜鏈實(shí)例_卡卡網(wǎng) webkaka.com</title>
</head>
<body>
<div id="divArticle" class="arcContent">
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
</div>
</body>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
//獲取Class為arcContent里面的所有img
var imglist=$(".arcContent img");
//或使用下面這句,獲取ID為divArticle里面的所有img
//var imglist=$("#divArticle img");
for(var i=0;i<imglist.length;i++){
if(imglist[i].getAttribute('src')){
imglist[i].setAttribute('src','http://read.html5.qq.com/image?imageUrl='+imglist[i].getAttribute('src'));
}
}
});
</script>
</html>
使用JQuery時(shí),記得要先引用jquery.js文件。
JQuery代碼還可以這樣寫:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Content-Language" content="zh-CN" />
<title>反防盜鏈實(shí)例_卡卡網(wǎng) webkaka.com</title>
</head>
<body>
<div id="divArticle" class="arcContent">
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
<img src="http://pagespeed.webkaka.com/rpt/demo/liudehua_91193710_1.jpg" >
<br><br>
</div>
</body>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$(".arcContent img").each(function(index, element) { //$(".arcContent img") 可換為 $("#divArticle img")
if($(element).attr('src')){
$(element).attr('src','http://read.html5.qq.com/image?imageUrl='+$(element).attr('src'));
}
});
});
</script>
</html>
上述兩個(gè)JQuery實(shí)例,一個(gè)通過for循環(huán)賦值,一個(gè)通過 $("selector").each(function(index, element) 賦值,殊途同歸。