vimperator ffmmx的插件屋
最近在用vimperator,被它的可以完全自定义扩展特性吸引了,再加上现在的ff支持很多HTML5的新功能,基本上可以通过JAVASCRIPT代码做到很多以前做不到的事情,比如文件系统操作。但是默认提供的功能还是很有限,所以为了方面还是需要自己扩展一些功能或者插件(这里说的这些东西只是给自己做一个备忘,没有什么特别的含义)
插件项目地址https://github.com/firefoxmmx2/vimperatorPlugins ,使用了github,速度比较快。
虽然vimperator 的; extend hint 已经提供很多功能,例如复制匹配的链接地址等功能,但是目前还没有 触发鼠标事件的功能,所以我自己写了一个作为补充。
代码:
//
// simulate mouse events
//
//
(function(){
let self=liberator.plugins.simulateMouseEvents=(function(){
var fireMouseEvt=function(elem,evtString){
var doc=content.document.wrappedJSObject;
if(doc.createEvent){
var evt=doc.createEvent('MouseEvents');
evt.initEvent(evtString,true,false);
elem.dispatchEvent(evt);
}
else if(doc.createEventObject){
elem.fireEvent('on'+evtString);
}
};
var PUBLICS={
mouseover:function(elem){
if(elem){
fireMouseEvt(elem,'mouseover');
elem.setAttribute('isMouseover',true);
}
else{
var activeElement=content.document.wrappedJSObject.activeElement;
fireMouseEvt(activeElement,'mouseover');
activeElement.setAttribute('isMouseover',true);
}
},
mouseout:function(elem){
if(elem){
fireMouseEvt(elem,'mouseout');
elem.setAttribute('isMouseover',false);
}
else{
var activeElement=content.document.wrappedJSObject.activeElement;
fireMouseEvt(activeElement,'mouseout');
activeElement.setAttribute('isMouseover',false);
}
}
};
//registe extend hint command like ;m
hints.addMode(
'm',
'active element trigge mouseover/mouseout',
function(node){
if(node.getAttribute('isMouseover') && node.getAttribute('isMouseover') == 'true'){
self.mouseout(node);
}
else{
self.mouseover(node);
//全局的上一个触发过over事件的元素
if(self.overElem && self.overElem!=node){
try{
self.overElem.setAttribute('isMouseover',false);
}
catch(e){}
}
self.overElem=node;
}
});
return PUBLICS;
})();
})();
CHROME插件 “复制选中的链接地址”
昨日本来在人人影视上面下载美剧,结果那部电视剧太多集了。CHROME下那个复制全部不能用。只好自己写一个。
代码如下:
注册文件 manifest.json
{
"name": "复制选中的链接地址",
"description": "复制选中的链接地址到剪贴板中(电驴,离线什么的)",
"version": "0.1",
"permissions": ["contextMenus","tabs","https://*/*","http://*/*"],
"background_page": "background.html"
}
实现选中链接文件(之前对CHROME也没有什么了解,临时从chrome API那里下载的一个例子,文件名忘改了) sample.js
var selection = window.getSelection();
if(selection.rangeCount > 0)
{
var range = selection.getRangeAt(0);
var div = document.createElement('div');
//把复制的内容放入div中,转化为DOM结构
div.appendChild(range.cloneContents());
var contents = "";
//获取div里面的,链接元素
var aucher_list = div.getElementsByTagName("a");
for (var i = 0; i < aucher_list.length; i++) {
contents += "\n" + aucher_list[i].href;
}
contents = contents.substring(1);
//向background发送ED2K链接
chrome.extension.sendRequest({text:contents});
}
background.js
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Background</title>
<script type="text/javascript" charset="utf-8">
chrome.extension.onRequest.addListener(function (msg, sender, sendResponse) {
var textarea = document.getElementById("lnktext");
textarea.value = msg.text;
textarea.select();
document.execCommand("copy", false, null);
sendResponse({});
}
);
function copylinkbyselected(info,tab){
chrome.tabs.executeScript(null, { "file" : "sample.js", "allFrames" : true } );
}
chrome.contextMenus.create(
{
"title": "copy link by selected",
"contexts":["selection"],
"type":"normal",
"onclick": copylinkbyselected
});
</script>
</head>
<body>
<textarea id="lnktext" rows="8" cols="40"></textarea>
</body>
</html>