修正VeryCD在启用AdBlock Plus的情况下的版面混乱问题的脚本
VeryCD是个不错的网站,除了在每个页面上面出现的flash广告(见下图)。当然我也知道VeryCD维持生存基本上要靠广告,但是经常搞死我浏览器的flash广告,我是不得已把它过滤掉的。
Firefox对于广告的解决方案当然是AdBlock Plus。这个插件可以按照通配符或者正则表达式来封锁广告。如果你不懂通配符或者正则表达式,直接用鼠标点点基本上也是可以解决问题的。通过在其中添加一条规则封锁 http://222.37.134.*/*.htm*,顺利达到了封锁VeryCD上面的flash广告的目的。
但是随之而来的问题是,因为过滤掉了一个iframe,整个页面布局就有了一些问题,资源详细信息因为布局的缘故无法显示(见下图)。
为了能够让它显示出来,只好另外再打一层补丁。这次用Greasemonkey,让它在加载VeryCD页面的时候在原本显示广告的地方显示另外一个东西来占个位置,自然就能够让详细信息部分显示了。
在这里显示什么呢?看了几个VeryCD页面之后,发现大多数的页面上面在简介部分都有至少一幅图片。按理说把第一副图片按比例缩小放在其中应该可以吧。最后结果见下图:
最后贴Greasemonkey脚本的代码。请将其拷贝到记事本保存为“所有文件”,文件名选择.user.js结束。保存后拖动到Firefox(事先需要安装了Greasemonkey),确定即可安装。
== 代码开始,请不要拷贝这一行 ==
// ==UserScript==
// @name Re-format VeryCD item detail
// @namespace http://ftofficer.spaces.live.com
// @description Re-format VeryCD item detail
// @include http://www.verycd.com/topics/*
// ==/UserScript==
function findFirstImg() {
var paras = document.getElementsByTagName(‘p’);
for (var i=0; i<paras.length; ++i) {
var p = paras[i];
if ( p.getAttribute(‘class’) == ‘inner_content’) {
var imgs = p.getElementsByTagName(‘img’);
if ( imgs && imgs.length > 0 )
return imgs[0];
}
}
return null;
}
function getScale(imgWidth, imgHeight, divWidth, divHeight) {
var wScale = divWidth * 1. / imgWidth;
var hScale = divHeight * 1. / imgHeight;
if ( wScale > 1. && hScale > 1. ) {
return 1.;
}
return wScale < hScale ? wScale : hScale;
}
function fixupVeryCDDetailPage() {
var moreInfo = document.getElementById(‘moreInfo’);
if ( moreInfo ) {
var frame = document.createElement(‘div’);
frame.setAttribute(‘class’, ‘Banner1′);
frame.width = 300;
frame.height = 250;
firstImg = findFirstImg();
if ( firstImg ) {
var img = document.createElement(‘img’);
img.src = firstImg.src;
var imgScale = getScale(img.width, img.height, frame.width, frame.height);
img.width = Math.floor(img.width * imgScale);
img.height = Math.floor(img.height * imgScale);
frame.appendChild(img);
}
if ( moreInfo.parentNode ) {
moreInfo.parentNode.insertBefore(frame, moreInfo);
}
}
}
fixupVeryCDDetailPage();
== 代码结束,请不要拷贝这一行 ==

