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; })(); })();