本站不兼容 8 以前的版本的 Interner Explorer 浏览器(或基于这些版本的 IE 的其他浏览器),并且页面样式不完全兼容 IE 8,我们建议你升级至 IE 9 或改用其他非 IE 浏览器

Mozest™

  • 正在加载用户菜单…

开放、分享、互助

引用 (我行我速 @ 2008年2月17日 10:36 AM) <{POST_SNAPBACK}>
有right encoding, autocopy, open text link的代码么?


我的这3个问题都得到解决了。下面是Right Encoding的代码:

代码
/* :::: Right Encoding :::: */

var menuContextMenu = document.getElementById("contentAreaContextMenu");
var menuRightEncoding = document.getElementById("charsetMenu");

var separatorFrameSep = document.getElementById("frame-sep");
menuContextMenu.insertBefore(menuRightEncoding, separatorFrameSep);

var menusepRightEncoding = document.createElement("menuseparator");
menusepRightEncoding.setAttribute("id", "contextsep-charsetmenu");
menuContextMenu.insertBefore(menusepRightEncoding, menuRightEncoding);


autocopy与open text link我已经做成按钮了,参见替代Autocopy自动复制高亮文字的按钮(CustomButton应用实例)
原贴: (我行我速 @ 2008年2月28日 12:48 AM)
[quote]原贴: (我行我速 @ 2008年2月17日 10:36 AM)
有right encoding, autocopy, open text link的代码么?
我的这3个问题都得到解决了。下面是Right Encoding的代码:
  1. /* :::: Right Encoding :::: */

  2. var menuContextMenu = document.getElementById("contentAreaContextMenu");
  3. var menuRightEncoding = document.getElementById("charsetMenu");

  4. var separatorFrameSep = document.getElementById("frame-sep");
  5. menuContextMenu.insertBefore(menuRightEncoding, separatorFrameSep);

  6. var menusepRightEncoding = document.createElement("menuseparator");
  7. menusepRightEncoding.setAttribute("id", "contextsep-charsetmenu");
  8. menuContextMenu.insertBefore(menusepRightEncoding, menuRightEncoding);
复制代码
autocopy与open text link我已经做成按钮了,参见替代Autocopy自动复制高亮文字的按钮(CustomButton应用实例)
[/quote]


这个代码好,比我弄得简洁多了
收下

[ 本帖最后由 Cye3s 于 2008-9-2 16:28 编辑 ]
我很懒...论坛消息很少看,所以可能很久没反应>_<
有人要的,搜索栏文本框右键菜单中增加"粘贴并搜索"
  1. (function()
  2. {
  3.     document.getElementById("searchbar").addEventListener("popupshowing", function(event)
  4.     {
  5.         var menupopup = event.originalTarget;
  6.         var refChild = menupopup.getElementsByAttribute("cmd", "cmd_paste")[0];
  7.         var canPaste = refChild.getAttribute("disabled") == "true";
  8.         var menuitem = document.getElementById("pasteandsearch-menuitem");
  9.         if (!menuitem)
  10.         {
  11.             var pasteAndSearch = function(event)
  12.             {
  13.                 if (event.type == "click" && event.button != 1)
  14.                     return;
  15.                 // paste
  16.                 goDoCommand("cmd_paste");
  17.                 // search
  18.                 //handleSearchCommand(event);
  19.                 BrowserSearch.loadSearch(readFromClipboard(), true);
  20.                 // close popup
  21.                 menupopup.hidePopup();
  22.                 // clear
  23.                 document.getElementById("searchbar").value = "";
  24.             };
  25.             menuitem = document.createElement("menuitem");
  26.             menuitem.id = "pasteandsearch-menuitem"
  27.             menuitem.setAttribute("label", "\u7C98\u8D34\u5E76\u641C\u7D22");
  28.             menuitem.setAttribute("accesskey", "G");
  29.             menuitem.addEventListener("command", pasteAndSearch, false);
  30.             menuitem.addEventListener("click",   pasteAndSearch, false);
  31.             menupopup.insertBefore(menuitem, refChild.nextSibling);
  32.         }
  33.         menuitem.setAttribute("disabled", canPaste.toString());
  34.     }, false);
  35. })();
复制代码
[ 本帖最后由 Cye3s 于 2008-9-2 16:29 编辑 ]
我很懒...论坛消息很少看,所以可能很久没反应>_<
谢谢哈。搜索栏出现了粘贴并搜索菜单。高手是否再进一步啊?让地址栏也出现“粘贴并打开”菜单啊。这样就完整取代paste and go扩展了。


这个动作的onCommand值是多少?谢谢。想編个更快捷的手势。
完整一点就是说。
判断剪贴板里的内容是否url。

1。是,放在地址栏粘贴并打开。【这个代码前面已经介绍了】我编了个鼠标手势了已经。
2。如果不是,则放在查找栏里粘贴并打开【这个还没有代码……】
引用 (nettrottist @ 2008年2月28日 4:00 PM) <{POST_SNAPBACK}>
谢谢哈。搜索栏出现了粘贴并搜索菜单。高手是否再进一步啊?让地址栏也出现“粘贴并打开”菜单啊。这样就完整取代paste and go扩展了。


这个动作的onCommand值是多少?谢谢。想編个更快捷的手势。
完整一点就是说。
判断剪贴板里的内容是否url。

1。是,放在地址栏粘贴并打开。【这个代码前面已经介绍了】我编了个鼠标手势了已经。
2。如果不是,则放在查找栏里粘贴并打开【这个还没有代码……】

你不要选择搜索引擎么?如果不需要选择的话,那就用地址栏的搜索功能不就可以了么?
但是地址栏只能搜剪贴板里的url内容。如果当前剪贴板里是文字(我这里指的“文字”就是普通文本字汇,并非文本型的链接)的话,是可以复制到地址栏里并开始搜但搜的东西多半打不开的。这种剪贴板里的文字,应该是粘到搜索栏并开始搜索。所以请你继续努力一下了。哈哈……

Searchbar Autosizer扩展有个设置项:是自动使搜索栏的搜索引擎弹回默认引擎的。。
附件: 您所在的用户组无法下载或查看附件
引用 (nettrottist @ 2008年2月28日 4:29 PM) <{POST_SNAPBACK}>
但是地址栏只能搜剪贴板里的url内容。如果当前剪贴板里是文字的话,是可以复制到地址栏里并开始搜但搜的东西多半打不开的。这种剪贴板里的文字,应该是粘到搜索栏并开始搜索。所以请你继续努力一下了。哈哈……

现在有个扩展是自动使搜索栏的搜索引擎弹回默认引擎的。。



搜的东西打不开是什么意思呢,你可以更改地址栏的默认搜索引擎阿。文字可以粘贴到地址栏搜索的。我的AutoCopy按钮增加的右键菜单Open As an URL,就是把选定内容粘贴到地址栏的,如果是链接就直接打开,不是链接就搜索了。
我的意思是说:如果你的剪贴板内容是文字的话,如果粘贴到了地址栏那是打不开什么实质性内容的。我指的是普通文字,并非文字型链接。就是“主题”“成员”等这些文字字汇。
引用 (nettrottist @ 2008年2月28日 4:38 PM) <{POST_SNAPBACK}>
我的意思是说:如果你的剪贴板内容是文字的话,如果粘贴到了地址栏那是打不开什么实质性内容的。我指的是普通文字,并非文字型链接。就是“主题”“成员”等这些文字字汇。



修改keyword.enabled为true,keyword.url为你的搜索引擎,network.enableIDN为false,地址栏搜索就OK了。
引用 (nettrottist @ 2008年2月28日 4:38 PM) <{POST_SNAPBACK}>
我的意思是说:如果你的剪贴板内容是文字的话,如果粘贴到了地址栏那是打不开什么实质性内容的。我指的是普通文字,并非文字型链接。就是“主题”“成员”等这些文字字汇。


有点被 nettrottist 同学弄糊涂了,如果在地址栏输入“主题”并go的话,会在新标签使用默认引擎搜索 “主题” 关键字阿!
这个应该是FF的默认行为吧!什么叫作 ‘打不开什么实质性内容’
代码多了,都忘了有没贴过,呵呵
地址栏的:Paste and Go
  1. /**
  2. * A user script for userChrome.js extension.
  3. * @name    Paste and Go
  4. * @description    Add 'Paste and Go' command to the context menu in Location bar.
  5. * @compatibility    Firefox 2.0
  6. * @author    Gomita
  7. * @version    2006.12.16
  8. * @permalink    http://www.xuldev.org/blog/?p=69
  9. */
  10. (function()
  11. {
  12.     document.getElementById("urlbar").addEventListener("popupshowing", function(event)
  13.     {
  14.         var menupopup = event.originalTarget;
  15.         var refChild = menupopup.getElementsByAttribute("cmd", "cmd_paste")[0];
  16.         var canPaste = refChild.getAttribute("disabled") == "true";
  17.         var menuitem = document.getElementById("pasteandgo-menuitem");
  18.         if (!menuitem)
  19.         {
  20.             var pasteAndGo = function(event)
  21.             {
  22.                 if (event.type == "click" && event.button != 1)
  23.                     return;
  24.                 // paste
  25.                 goDoCommand("cmd_paste");
  26.                 // and go
  27.                 handleURLBarCommand(event);
  28.                 // close popup
  29.                 menupopup.hidePopup();
  30.             };
  31.             menuitem = document.createElement("menuitem");
  32.             menuitem.id = "pasteandgo-menuitem"
  33.             menuitem.setAttribute("label", "\u7C98\u8D34\u5E76\u8F6C\u5230");
  34.             menuitem.setAttribute("accesskey", "G");
  35.             menuitem.addEventListener("command", pasteAndGo, false);
  36.             menuitem.addEventListener("click",   pasteAndGo, false);
  37.             menupopup.insertBefore(menuitem, refChild.nextSibling);
  38.         }
  39.         menuitem.setAttribute("disabled", canPaste.toString());
  40.     }, false);
  41. })();
复制代码
原贴:
1。是,放在地址栏粘贴并打开。【这个代码前面已经介绍了】我编了个鼠标手势了已经。
2。如果不是,则放在查找栏里粘贴并打开【这个还没有代码……】
想法不错,我去写个看看

[ 本帖最后由 Cye3s 于 2008-9-2 16:30 编辑 ]
我很懒...论坛消息很少看,所以可能很久没反应>_<
不行,分两种情况。
复制文字后右键粘贴到地址栏里,火狐用默认引擎开始搜索了。

但用我根据前面几个贴子里paste and go編的手势,就不会用默认引擎搜索,而是开始解析这个中文字作为域名了。而这个手势我已经用了几天了,如果剪贴板内的是url内容,划了手势就能顺利打开网址。
谢谢楼主啊,地址栏的“粘贴并转到”菜单成功出现。你的两段代码至此完美替换了paste and go扩展。:)牛 …………哈哈。
引用 (nettrottist @ 2008年2月28日 4:49 PM) <{POST_SNAPBACK}>
不行,分两种情况。
复制文字后右键粘贴到地址栏里,火狐用默认引擎开始搜索了。

但用我根据前面几个贴子里paste and go編的手势,就不会用默认引擎搜索,而是开始解析这个中文字作为域名了。而这个手势我已经用了几天了,如果剪贴板内的是url内容,划了手势就能顺利打开网址。



关闭IDN功能就不会解析中文域名了。你把你手势代码贴出来让大家帮你看一下嘛。
以下是用于KeyConfig或Custom Button的代码
是URL在打开网址,是普通文本进行搜索.
从sunwan的easydragtogo偷了段判断是否URL的代码
  1. /*代码*/
  2. //2008-02-29
  3. var str = readFromClipboard();
  4. var DomainName = /(\w+(\-+\w+)*\.)+\w{2,7}/;
  5. var HasSpace = /\S\s+\S/;
  6. var HasTwOrSlash = /^(www|bbs|forum|blog)|\//;
  7. var IsIpAddress = /^([1-2]?\d?\d\.){3}[1-2]?\d?\d/;
  8. var IsURL = !HasSpace.test(str)
  9.              && (HasTwOrSlash.test(str)
  10.                  && DomainName.test(str)
  11.                  || IsIpAddress.test(str));
  12. if (IsURL) {
  13.    gBrowser.selectedTab = gBrowser.addTab(str);
  14. }
  15. else{
  16.    BrowserSearch.loadSearch(str, true);
  17. }
复制代码
调用搜索框默认方法,配合一些搜索后清空搜索串和恢复默认引擎的扩展或脚本
  1. var str = readFromClipboard();
  2. var searchbar = document.getElementById("searchbar");
  3. var DomainName = /(\w+(\-+\w+)*\.)+\w{2,7}/;
  4. var HasSpace = /\S\s+\S/;
  5. var HasTwOrSlash = /^(www|bbs|forum|blog)|\//;
  6. var IsIpAddress = /^([1-2]?\d?\d\.){3}[1-2]?\d?\d/;
  7. var IsURL = !HasSpace.test(str)
  8.              && (HasTwOrSlash.test(str)
  9.                  && DomainName.test(str)
  10.                  || IsIpAddress.test(str));
  11. if (IsURL) {
  12.    gBrowser.selectedTab = gBrowser.addTab(str);
  13. }
  14. else{
  15.    searchbar.value = str;
  16.    searchbar.handleSearchCommand(event);
  17. }
复制代码
[ 本帖最后由 Cye3s 于 2008-11-19 09:25 编辑 ]
我很懒...论坛消息很少看,所以可能很久没反应>_<
代码
var paste = readFromClipboard();
if(!paste) return;
gBrowser.selectedTab = gBrowser.addTab(paste);


鼠标手势。

PS:IDN怎么关闭啊?
引用 (nettrottist @ 2008年2月28日 5:16 PM) <{POST_SNAPBACK}>
代码
var paste = readFromClipboard();
if(!paste) return;
gBrowser.selectedTab = gBrowser.addTab(paste);


鼠标手势。

PS:IDN怎么关闭啊?


下面这段代码是先粘贴到地址栏再打开。
代码
var paste = readFromClipboard();
if(!paste) return;
gURLBar.value = paste;
handleURLBarCommand();


IDN关闭用network.enableIDN,在about:config里设置。
引用 (Cye3s @ 2008年2月28日 5:16 PM) <{POST_SNAPBACK}>
以下是用于KeyConfig或Custom Button的代码
是URL在打开网址,是普通文本进行搜索.
还比较简单,判断网址的正则式没写好 sleep.gif ,会有误判,谁丢个好用的?
代码
var str = readFromClipboard();
if(!str) return;
if (/^file:\/{3}|^data:.+|^(?!java script:)\S*?(([\w-]\.)+\w{2,7}|localhost([:\/]|$))\S*$/.test(str)) {
    gBrowser.loadOneTab(str);
}
else{
    BrowserSearch.loadSearch(str, true);
}

正则式不熟悉哦,不过URL的正则式网上应该能搜到吧。
你现在是用当前引擎搜索,如果要用默认引擎搜索,那还得在BrowserSearch之前设置一下引擎。
不行啊。关闭IDN后,剪贴板内容如果是汉字的话,就是www.“那几个汉字”.com.....
判断网址从sunwan哪里"偷"了过来
这个应该转移到KeyConfig下讨论了,可以再改进~
其实论坛可以开个JS脚本专区
现在好多扩展能自己写JS " border="0" alt="thumbsup.gif" />
我很懒...论坛消息很少看,所以可能很久没反应>_<
引用 (nettrottist @ 2008年2月28日 5:32 PM) <{POST_SNAPBACK}>
不行啊。关闭IDN后,剪贴板内容如果是汉字的话,就是www.“那几个汉字”.com.....


再关闭自动完成?
broswer.urlbar.autofill  本来就是false
引用 (Cye3s @ 2008年2月28日 5:16 PM) <{POST_SNAPBACK}>
代码
var str = readFromClipboard();
if(!str) return;
if (/^file:\/{3}|^data:.+|^(?!java script:)\S*?(([\w-]\.)+\w{2,7}|localhost([:\/]|$))\S*$/.test(str)) {
    gBrowser.loadOneTab(str);
}
else{
    BrowserSearch.loadSearch(str, true);
}



这段代码已经可以基本能区分剪贴板里的URL和普通文字的差别,并进而进行不同的操作了 " border="0" alt="thumbsup.gif" /> " border="0" alt="thumbsup.gif" /> ……至少我试验了几个都成功。期待能最终完善。
原贴: (nettrottist @ 2008年2月29日 1:30 AM)
[quote]原贴: (Cye3s @ 2008年2月28日 5:16 PM)
  1. var str = readFromClipboard();
  2. if(!str) return;
  3. if (/^file:\/{3}|^data:.+|^(?!java script:)\S*?(([\w-]\.)+\w{2,7}|localhost([:\/]|$))\S*$/.test(str)) {
  4.     gBrowser.loadOneTab(str);
  5. }
  6. else{
  7.     BrowserSearch.loadSearch(str, true);
  8. }
复制代码
这段代码已经可以基本能区分剪贴板里的URL和普通文字的差别,并进而进行不同的操作了   ……至少我试验了几个都成功。期待能最终完善。
[/quote]

这个还不完善,比如我复制了BrowserSearch.loadSearch,结果变成打开URL了,本来应该是查找
上面的代码更新了下,你再试试

[ 本帖最后由 Cye3s 于 2008-9-2 16:31 编辑 ]
我很懒...论坛消息很少看,所以可能很久没反应>_<
用了更新的代码,测试BrowserSearch.loadSearch ,2.0是查找。呵呵……
现在换3.0了,变成了网址搜索。
帮楼主贴一个(不要分散,以后好查找)
userChrome.js代码,双击空白区域刷新网页。shift+双击空白区域为忽略缓存刷新网页。
当然用event.pageX和event.pageY来判断双击位置来调用不同功能也可以的,改改就是了

代码
// ==UserScript==
// @name           reloadOnDblClick.uc.js
// @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
// @description    reload On DblClick contentarea
// @include        main
// @compatibility  Firefox 2.0 3.0
// @author         Alice0775
// @version        LastMod 2007/10/17 01:00
// @Note           コンテントエリア左ダブルクリックでリロード, +shiftKeyキャッシュ無視リロード
// ==/UserScript==

var reloadOnDblClicks = {
  init: function(){
    //this._window = document.getElementById("appcontent");
    this._window = gBrowser.mPanelContainer;
    this._window.addEventListener("dblclick", this, false);
  },

  uninit: function(){
    this._window.removeEventListener("dblclick", this, false);
  },

  handleEvent: function(event){
    if(event.button == 0) {
      //再読込
    
      var target = event.target;
      if(this.getselection() !== '') return;
      //if(event.target.localName=='HTML') return;
      //if(this.isImageNode(target) ) return;
      if(this.isParentClickableNode(target) ) return;
      if(this.isParentEditableNode(target) ) return;
      var doc = target.ownerDocument;
      if(doc.contentType != 'text/plain'
       && doc.contentType != 'text/html'
       && doc.contentType != 'application/xml'
       && doc.contentType != 'application/xhtml+xml') return;
      event.stopPropagation();
      if(event.shiftKey)
         BrowserReloadSkipCache();
      else
         BrowserReload();
    }
  },
  
  _getFocusedWindow: function(){
    var focusedWindow = document.commandDispatcher.focusedWindow;
    if (!focusedWindow || focusedWindow == window)
      return window._content;
    else
      return focusedWindow;
  },
  
  //選択文字列を得る
  getselection: function() {
    var targetWindow = this._getFocusedWindow();
    var sel = Components.lookupMethod(targetWindow, 'getSelection').call(targetWindow);
    // for textfields
    if (sel && !sel.toString()) {
      var node = document.commandDispatcher.focusedElement;
      if (node &&
          (node.type == "text" || node.type == "textarea") &&
          'selectionStart' in node &&
          node.selectionStart != node.selectionEnd) {
        var offsetStart = Math.min(node.selectionStart, node.selectionEnd);
        var offsetEnd   = Math.max(node.selectionStart, node.selectionEnd);
        return node.value.substr(offsetStart, offsetEnd-offsetStart);
      }
    }
    return sel ?
      sel.toString() : "";
  },
  
  isImageNode: function(aNode){
    while(aNode){
      if(aNode.nodeName.match(/img/i))
        return aNode;
      aNode = aNode.parentNode;
    }
    return false;
  },
  
  isParentClickableNode : function(aNode) {
    if (!aNode) return null;
    var d = aNode.ownerDocument;
    try {
      var xpathResult = d.evaluate(
          'ancestor-or-self::*[((local-name() = "a" or local-name() = "A" or local-name() = "area" or local-name() = "AREA") and @href) or local-name() = "button" or local-name() = "BUTTON" or ((local-name() = "input" or local-name() = "INPUT") and (@type = "SUBMIT" or @type = "submit" or @type = "BUTTON" or @type = "button" or @type = "IMAGE" or @type = "image"))]',
          aNode,
          d.createNSResolver(this.NSResolver),
          XPathResult.FIRST_ORDERED_NODE_TYPE,
          null
        );
    }catch(e) {return null;}
    return xpathResult.singleNodeValue;
  },
  
  NSResolver : {
    lookupNamespaceURI : function(aPrefix)
    {
      switch (aPrefix)
      {
        case 'xul':
          return 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
        case 'html':
        case 'xhtml':
          return 'http://www.w3.org/1999/xhtml';
        case 'xlink':
          return 'http://www.w3.org/1999/xlink';
        default:
          return '';
      }
    }
  },
  
  isParentEditableNode : function(aNode){
    while (aNode && aNode.parentNode){
      var isEditable = false;
      try {
        if(aNode.localName.toLowerCase()=='input'&& aNode.hasAttribute('type')
           && (aNode.getAttribute('type').toLowerCase()=='submit'
            || aNode.getAttribute('type').toLowerCase()=='button')) return null;
        aNode.QueryInterface(Components.interfaces.nsIDOMNSEditableElement);
        return aNode;
      }
      catch(e) {
      }
      aNode = aNode.parentNode;
    }
    return null;
  },
  
  debug: function(aMsg){
    const Cc = Components.classes;
    const Ci = Components.interfaces;
    Cc["@mozilla.org/consoleservice;1"]
      .getService(Ci.nsIConsoleService)
      .logStringMessage(aMsg+"  L:"+this._isMouseDownL+"  R:"+this._isMouseDownR);
    
    //dump(aMsg);
  }
};

// エントリポイント
reloadOnDblClicks.init();
window.addEventListener("unload", function(){ reloadOnDblClicks.uninit(); }, false);
让网页停止载入的userchrome.js能編出来吗?
还有让所有标签页重新载入的呢?
http://space.geocities.yahoo.co.jp/gl/alice0775/view/200709

这里一个日本人編的代码好强啊。大大增强了drag de go的机能。看他的介绍除了可实现drag de go能实现的指定引擎打开。保存链接等功能。还增加实现页面搜索,站内搜索。楼主看看这段代码……
引用 (nettrottist @ 2008年3月1日 12:36 AM) <{POST_SNAPBACK}>
让网页停止载入的userchrome.js能編出来吗?
还有让所有标签页重新载入的呢?

停止:
BrowserStop();

停止所有:
var len = gBrowser.mPanelContainer.childNodes.length;
for (var i = 0; i < len; i++) {
gBrowser.getBrowserAtIndex(i).stop();
}

刷新所有:
var len = gBrowser.mPanelContainer.childNodes.length;
for (var i = 0; i < len; i++) {
gBrowser.getBrowserAtIndex(i).reload();
}
扩展都是开放源码的,从里面能找出很多有用的代码
看你想怎么调用了
我很懒...论坛消息很少看,所以可能很久没反应>_<
引用 (nettrottist @ 2008年3月1日 12:46 AM) <{POST_SNAPBACK}>
http://space.geocities.yahoo.co.jp/gl/alice0775/view/200709

这里一个日本人編的代码好强啊。大大增强了drag de go的机能。看他的介绍除了可实现drag de go能实现的指定引擎打开。保存链接等功能。还增加实现页面搜索,站内搜索。楼主看看这段代码……

有没有Drag&Go扩展支持JS编码的?我想给Read it Later编个动作。