就可以打开了。但是这样有个问题,不仅请求资源不带referrer,打开_react if">
赞
踩
我在引用外部图片资源时,提示403。很显然对referrer进行了过滤。浏览器新窗口试一下,发现可以打开,说明空referrer可以解决这个问题。
在head标签加上<meta name="referrer" content="never">
就可以打开了。
但是这样有个问题,不仅请求资源不带referrer,打开新网页也没有referrer了。显然这不是我想要的结果。
新建一个image.html
、image.js
。在image.html
引入image.js
,在js脚本中通过解析页面url链接location.href
来获取要请求的资源链接。需要注意的是,在传递参数时候,不要使用传统的’?’,使用锚#
来分隔链接和参数。
<a class="art" target="_blank" href="/post/1.html">
<div class="img"><iframe seamless src="/image.html#image=/image.jpg"></iframe></div>
<span class="title font-14 m-t-8 line-text-2"title</span>
</a>
需要注意,iframe内的内容并不能自适应大小,如果不处理,img会被拉伸,不能正常展示,应该给iframe设置确定的宽高。我在iframe外面嵌套了一个div,设置宽高,并将iframe设置宽高均为100%(其实直接给iframe设置宽高就行了,因为在处理防盗链以前,我的img标签外包裹一个div实现图片自适应缩放,为了少改代码就这样了)。
/* 自适应缩放图片 */
/* 根据实际情况设置宽高 */
.img{position: relative;overflow: hidden;}
.img iframe {border: none;width: 100%;height: 100%;border-radius: 4px;pointer-events: none;}
pointer-events: none
很重要,阻止鼠标事件,移动端touch事件也能阻止。如果在幻灯、翻页组件中使用,是必不可少的。
<!DOCTYPE html> <html> <head> <title></title> <meta name="referrer" content="never"> <meta http-equiv="expires" content="2626560"> <style type="text/css"> *{margin: 0;padding: 0;border: none;overflow: hidden;} body{position: absolute;width: 100%;height: 100%;} img{width: 100%;height: 100%;} </style> </head> <body> <img style="" src="/static/image/cover.png"> <script type="text/javascript" src="/static/js/image.js"></script> </body> </html>
除了<meta name="referrer" content="never">
以外,<meta http-equiv="expires" content="2626560">
也是必不可少的,设置浏览器缓存,我设置了一个月,建议设置大于一天。
还记得前面传递参数时时候用锚链接吗?使用锚链接可以使用缓存,传统?
来分隔参数会在参数变化时重新请求image.html
。这是没有必要的,徒增服务器压力。
image.js
function param(key) { var params = new Array(); var url = location.href; var url = url.split('#',2).length==2 ? url.split('#',2)[1] : null; if (url!==null) { url = url.split('&') url.forEach(function(item,index){ var data = item.split('=',2); params[data[0]] = data.length==2 ? data[1] : ''; }); } return params.hasOwnProperty(key) ? params[key] : ''; } var image = param('image').length>0 ? param('image') : "/static/image/cover.png"; document.querySelector('img').setAttribute('src', image);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。