`
marlonyao
  • 浏览: 252712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

几个Vimperator小插件

阅读更多
虽说标题是插件,但实际上我都写在.vimperatorrc配置文件中。

第一个是用来在http和https之间切换的插件。很多网页同时有http和https版本,在两个之间切换比较麻烦,所以就写了这个,
下面所有的代码都放在.vimperatorrc中,如果在windows下则放在_vimperatorrc下。
:js << EOF
    toggleSSL = function() {
		var regex = /^(http|https):\/\/(.*)$/;
		var result = regex.exec(buffer.URL);
		if (result) {
			if (result[1] == 'http') {
				var url = 'https://' + result[2]	
			} else {
				var url = 'http://' + result[2]
			}

			liberator.execute('normal :open ' + url + '<CR>')
		}
	}
EOF
command ssl js toggleSSL()

这样便可以直接通过":ssl"来在http和https之间切换了,当然你也可以映射成一个快捷键,这样更方便,但我更喜欢键入命令,
我不太喜欢记太多快捷键。



不知道你没有这样的体验,当你通过google搜索出一大堆网站之后,随便点了一个网站之后,发现reset了,是不是很郁闷,
虽然你有代理,并且使用了AutoProxy,但是这不起作用,因为google的搜索結果并不是直接引向搜索页面,而是通过google重定向到
搜索页面的,搜索页面的网址是附在它的url参数内。这时就需要直接打开搜索页面,但是手工去这个操作很麻烦,于是就有了下面的
脚本:
:js << EOF
    ungoogle = function () {
		url = buffer.URL
		url = getUrlParam(url, 'url')
		liberator.echo('opening ' + url)
		liberator.open(url)
    }

	// copy from http://goo.gl/qf7J
	function getUrlParam(url, name)
	{
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp( regexS );
	  var results = regex.exec(url);
	  if( results == null )
		return "";
	  else
		return unescape(results[1]);
	}

	commands.addUserCommand (["ungoogle"], "extract url from google and open it",
		function (args) {
			ungoogle()
		}
	);
EOF

然后通过":ungoogle"可以直接打开搜索网页。你可能很难尝试这条命令,因为如果一切正常的话,google会自动重定向。
幸运的是,我们生活在天朝,不正常的时候并不少。你只要搜索技术文章,可能就会搜到blogspot或者google group上去,
点击它,接下的事就不说了。另外,如果不想reset,可以试试google的https搜索,但是我还不知道如何在Vimperator下
如何默认设置成使用https搜索,哪位知道,不妨告知下,不胜感激。


如果有些网站reset了,而本地代理服务器有时会不起作用,最近TOR就很不灵光,这时Web代理是个比较好的选择。我比较喜欢的代理是这个http://qlba8.cn/xin.html。同样地,我选择写vimperator脚本来自动化一些事情,下面的有点长:
	toggleProxy = function() {
		url = buffer.URL;
		var regex = /^http:\/\/\w+\.ip156\.com\/.*$/;
		if (regex.exec(buffer.URL)) {
			doc = window.content.document;
			form = doc.getElementsByTagName('form')[0];
			elems = form.getElementsByTagName('input');
			eurlElem = null;
			for (i = 0; i < elems.length; i++) {
				if (elems[i].name == 'u')
					eurlElem = elems[i];
			}
			if (eurlElem) {
				url = eurlElem.value;
				liberator.open(url)
			}
		} else {
			liberator.open('http://www.qlba8.com/proxy.html');
			
			maxWaitInterval = 200;
			maxWaitCount = 25; // 5s
			waitCount = 0
			timeout = function() {
				waitCount++;
				if (waitCount > maxWaitCount) {
					liberator.echoerr('cannot connect');
				}
				doc = window.content.document;
				form = doc.getElementsByTagName('form')[0];
				if (!form) {
					setTimeout(timeout, maxWaitInterval);
					return
				} else {
					form.target = ''
					eurl = form.getElementsByTagName('input')[0]
					eurl.value = url
					form.submit()
				}
			}
			setTimeout(timeout, maxWaitInterval);
		}
	}
EOF
command proxy :js toggleProxy()

之后便可以使用命令":proxy"在使用web代理和直接访问之间切换了。

以上就是我今天要介绍的三个小插件,如果你有心的话,便知道它们的相关性很强。
分享到:
评论
3 楼 marlonyao 2010-09-11  
@nob0dy
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                   .getService(Components.interfaces.nsIWindowMediator);
var browserWindow = wm.getMostRecentWindow("navigator:browser");
browserWindow.minimize();

可以参考:
https://developer.mozilla.org/en/Working_with_windows_in_chrome_code
https://developer.mozilla.org/en/DOM/window

可这有什么用呢?
2 楼 gfdice 2010-08-26  
好东西。
有两个代理,正琢磨怎么快速切换呢,却发现vimperator不支持vim的函数定义,终于在你这里找到解决方法——定义js函数~
1 楼 nob0dy 2010-08-19  
大哥,能不能写个最小化浏览器窗口的代码?

相关推荐

Global site tag (gtag.js) - Google Analytics