Board logo

标题: [交流] 让书签、历史、url、搜索在新的标签页打开(2017/11/05更新) [打印本页]

作者: golf-at    时间: 2008-11-13 17:19     标题: 让书签、历史、url、搜索在新的标签页打开(2017/11/05更新)

本帖最后由 golf-at 于 2017-11-5 10:51 编辑 这是 userChrome.js 脚本,适用于 firefox 3.0 以上的版本,让“书签”、“历史”、“地址”、“搜索”在新的标签页打开。有了这个脚本,我放弃使用 Tab Mix Lite CE 或者 Tab Mix Plus 了。下面的代码加到 userChrome.js 中,或者保存为 .uc.js 为后缀的文件放在配置文件夹的 chrome 目录下,同时使用附件提供的 userChrome.js。没有安装 userChrome.js 扩展的可以从附件下载安装。 2017/11/05[attach]31161[/attach] ☆支持最新的 Firefox 57。不过这个脚本,有时用着用着就不能打开书签了,之前必须重启 Firefox 才可以,现在增加拦截异常,出错时还在当前标签页打开。 2015/03/05[attach]31028[/attach] ☆修正了浏览器有时不能打开书签链接的bug。 ☆支持“显示您的历史记录”按钮弹出菜单里面的历史记录。 2014/12/21[attach]30999[/attach] ☆ 支持书签在侧边栏打开。 ☆ 隐私浏览窗口的空白标签页,以前版本不认为是空白的,现在认为是空白的了。 2014/12/11[attach]30995[/attach] ☆ javascript: 开头的网址,在当前标签页打开了。 2014/12/06 [attach]30991[/attach] ☆ 支持最新版 Firefox ☆ 支持 “侧边栏”和“我的足迹”中的书签和历史 在新标签页打开。 2012/02/04 [attach]26934[/attach] ☆ 支持最新的 firefox 13.0a1 每夜版。 2010/12/29 [attach]22463[/attach] ☆ 更新了一下,新版本支持“我的足迹”了。 2010/08/15 [attach]16894[/attach] ☆ 由于firefox b4pre 的函数 replace() 自身的bug,导致脚本失效。如果 replace() 第一个参数为字符串且含括号,同时第二个参数含 $& 时,replace() 就不做替换,第一个参数使用正则表达式就没问题。现在调用 replace() 时第一个参数使用正则表达式了。 2009/04/27 ☆ 修正了“书签管理器”(我的足迹)中点击书签时无法打开书签的问题。
作者: golf-at    时间: 2008-11-13 17:47

再提供一个脚本:在标签上双击关闭,空白处双击开新标签;在标签上点中键关闭标签,在空白处点中键恢复关闭的页面。
  1. function TabClick(e, DblClick) {
  2.     if (e.ctrlKey || e.shiftKey || e.altKey)
  3.         return;
  4.     if (DblClick==1 && e.button!=0) return;
  5.     if (DblClick==0 && e.button!=1) return;

  6.     var aTab = e.originalTarget;
  7.     if (aTab.localName=="toolbarbutton")
  8.         return;
  9.     while(aTab.localName != "tabs") {
  10.         if (aTab.localName == "tab")
  11.             break;
  12.         else
  13.             aTab = aTab.parentNode;
  14.     }
  15.     if (aTab.localName != "tab") {
  16.         if (DblClick == 1)
  17.             BrowserOpenTab();
  18.         else
  19.             undoCloseTab();
  20.     }
  21.     else if(gBrowser.mTabContainer.childNodes.
  22.         length == 1)
  23.         openUILinkIn("about:blank", "current");
  24.     else
  25.         gBrowser.removeTab(aTab);
  26. }
  27. function TabBarClick(e) {
  28.     if (e) TabClick(e, 0);
  29. }
  30. function TabBarDblClick(e) {
  31.     if (e) TabClick(e, 1);
  32. }
  33. getBrowser().onTabClick = TabBarClick;
  34. getBrowser().onTabBarDblClick = TabBarDblClick;
复制代码
[ 本帖最后由 golf-at 于 2008-11-14 22:21 编辑 ]
作者: gameboyhx    时间: 2008-11-13 18:06

收藏了~谢谢楼主分享
作者: golf-at    时间: 2008-11-13 19:16

原帖由 nettrottist 于 2008-11-13 18:48 发表
啊,我要试试。看看能不能就此跟tab类扩展说再见了!

晕,怎么在我这里两个脚本都没有起作用呢?
并且默认的标签页外观也不理想,太宽了,有办法不借助扩展来变短些吗? ...
使用 http://mozilla.sociz.com/viewthread.php?tid=20276 这个帖子里面提供的扩展以及 userChrome.js。我已经在1楼提供扩展和 userChrome.js(读取.uc.js为后缀的脚本文件)。

[ 本帖最后由 golf-at 于 2008-11-13 19:21 编辑 ]
作者: nettrottist    时间: 2008-11-13 19:22

我当然是用了这个扩展,还加挂了好多的脚本。我把上面两段作成单独的us.js和在chrome文件夹下,以免出问题时不好排除原因。但是加上之后没有任何效果。

PS:好奇怪,当我把脚本放在userchrome.js文件里面时(而不是单独做一个uc.js)重启,第二个脚本达到了效果。第一个还是无效啊。

[ 本帖最后由 nettrottist 于 2008-11-14 10:41 编辑 ]
作者: zls123    时间: 2008-11-13 19:45

第一个脚本无效 ,第二个可以使用
作者: nettrottist    时间: 2008-11-13 20:06

搜索栏的结果在新标签页打开
about:config
browser.search.openintab   把值设为true,即可
解决上面这个办法搜索时点“放大镜”仍然在当前tab打开的毛病,有下面的代码
  1. /*open search in new tab */
  2. (function() {   
  3.     try {
  4.         var cName = "@mozilla.org/preferences-service;1";
  5.         var fPref = Components.classes[cName].getService(Components
  6.             .interfaces.nsIPrefService);
  7.         if (fPref.getBoolPref("browser.search.openintab") != true)
  8.             fPref.setBoolPref("browser.search.openintab", true);
  9.         eval("whereToOpenLink = " + whereToOpenLink.toString().replace(
  10.             'if (!e) {', 'if (e&&e.currentTarget.getAttribute("anonid")\
  11.             =="search-go-button") return "tab"; [        DISCUZ_CODE_0        ]'));
  12.     }catch(e){}

  13. })();

  14. function _LoadURL(aTriggeringEvent, aPostData)
  15. {
  16.     var where = (gBrowser.currentURI.spec!='about:blank' ||
  17.         gBrowser.webProgress.isLoadingDocument) ? 'tab' :
  18.         'current';
  19.     if (gURLBar.value!='') openUILinkIn(gURLBar.value, where);
  20.     return true;
  21. }
复制代码
URL在新标签页打开(userchrome.js脚本)
  1. eval("BrowserLoadURL = " + BrowserLoadURL.toString().replace("e;", "[        DISCUZ_CODE_0        ] if ((gBrowser.currentURI.spec != 'about:blank' || gBrowser.webProgress.isLoadingDocument)) { var tab = gBrowser.addTab(); gBrowser.selectedTab = tab; }"));
复制代码
书签和历史,暂时未找到。也没关系,就用中键来点击吧,反正现在有了awesome bar。已经很少去用书签和历史了。

http://mozilla.sociz.com/viewthr ... mp;page=2#pid114458
再加上这个:保护标签页。也是userchrome.js脚本。

隐藏标签页上的关闭按钮:
  1. .tabs-closebutton-box, .tab-close-button {display: none !important;}
复制代码
隐藏标签栏上的标签页列表下拉箭头:
  1. @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
  2. .tabbrowser-arrowscrollbox + stack {display: none !important;}
复制代码
about:config
browser.tabs.tabMaxWidth  设为150(改变标签页宽度)
browser.tabs.tabMinWidth   设为50(改变标签页最小宽度)

使标签栏能多行显示的userchrome.css
http://userstyles.org/styles/10930
http://userstyles.org/styles/10989


经过这几步的拾掇,已经跟我使用tab mix plus时的标签栏的外观,效果差不多完全相等了!

[ 本帖最后由 nettrottist 于 2008-11-17 08:19 编辑 ]
作者: zls123    时间: 2008-11-13 20:42

楼上的 有个autoClick的gm脚本
作者: Havanna    时间: 2008-11-13 21:00

我还是用我自己的userchrome.js.xpi和userchrome.js
搂住提供的不对我胃口哈
作者: nettrottist    时间: 2008-11-13 21:01

userchrome.js扩展不就0。8吗、难道真还有不同的版本不成。
作者: golf-at    时间: 2008-11-13 21:34

原帖由 nettrottist 于 2008-11-13 21:01 发表
userchrome.js扩展不就0。8吗、难道真还有不同的版本不成。
当初的 0.8 版,在 firefox 3.0 时就不行了,后来有人改了一下,就变成了 0.8mod 版了。
作者: akaziv    时间: 2008-11-13 21:46

书签和历史可以用鼠标中建可以实现啊
作者: golf-at    时间: 2008-11-13 22:07

设定标签最大和最小宽度的代码:
  1. var maxWidth = 200, minWidth = 120;
  2. gBrowser.mTabContainer.mTabMaxWidth = maxWidth;
  3. gBrowser.mTabContainer.mTabMinWidth = minWidth;
  4. for(i=0; i<getBrowser().mTabContainer.childNodes
  5.     .length; i++) {
  6.     var tab = gBrowser.mTabContainer.childNodes[
  7.         i];
  8.     tab.setAttribute("maxwidth", maxWidth);
  9.     tab.setAttribute("minwidth", minWidth);
  10. }
复制代码
[ 本帖最后由 golf-at 于 2008-11-13 23:43 编辑 ]
作者: golf-at    时间: 2008-11-13 22:09

原帖由 nettrottist 于 2008-11-13 19:22 发表
我当然是用了这个扩展,还加挂了好多的脚本。我把上面两段作成单独的us.js和在chrome文件夹下,以免出问题时不好排除原因。但是加上之后没有任何效果。

PS:好奇怪,当我把脚本放在userchrome.js文件里面时(而不是单独做一 ...
我的机器上,两个脚本都是放在单独的 .uc.js 文件中,没有问题。难道是和其它的脚本有冲突?你将其它脚本先删除试试看。
作者: nettrottist    时间: 2008-11-13 22:17

不删,我其他的脚本都是必须的。
作者: golf-at    时间: 2008-11-13 22:32

原帖由 nettrottist 于 2008-11-13 22:17 发表
不删,我其他的脚本都是必须的。
我不是叫你就不用其它的脚本了,是临时删除(移到其它目录即可),看看是不是和其它的脚本冲突。就也如同一些扩展会冲突一样,各个独立的脚本,也有可能会发生冲突。
作者: golf-at    时间: 2008-11-13 23:30

原帖由 zls 于 2008-11-13 19:45 发表
第一个脚本无效 ,第二个可以使用
刚才一直没有注意,发帖时没有“禁用URL识别”,结果代码中的两个字符被转换成[        DISCUZ_CODE_0        ],造成脚本加载失败,现在OK了。
作者: nettrottist    时间: 2008-11-13 23:52

原帖由 golf-at 于 2008-11-13 22:07 发表
设定标签最大和最小宽度的代码:var maxWidth = 200, minWidth = 120;
gBrowser.mTabContainer.mTabMaxWidth = maxWidth;
gBrowser.mTabContainer.mTabMinWidth = minWidth;
for(i=0; i
about:config
browser.tabs.tabMaxWidth  设为150(改变标签页宽度)
browser.tabs.tabMinWidth   设为50(改变标签页最小宽度)

何必那么麻烦?
作者: golf-at    时间: 2008-11-14 00:11

原帖由 nettrottist 于 2008-11-13 19:59 发表
再问一下楼主,能不能编出光标移动到标签上,这个标签获得焦点调到前台。(省去一次点击)
  1. /* auto focus tab */
  2. gBrowser.mTabBox.addEventListener('mouseover',
  3.     function(e){ gBrowser.selectedTab=e.target },
  4.     false);
复制代码

作者: nettrottist    时间: 2008-11-14 08:29

原帖由 golf-at 于 2008-11-14 00:11 发表
/* auto focus tab */
gBrowser.mTabBox.addEventListener('mouseover',
    function(e){ gBrowser.selectedTab=e.target },
    false);
有效,感谢中……能不能把这个获得焦点的时间也设上,比如鼠标放在标签上超过200毫秒以上选择,否则不选。
效果已经很好,又节省了一个tab focus的扩展。

[ 本帖最后由 nettrottist 于 2008-11-14 09:02 编辑 ]
作者: golf-at    时间: 2008-11-14 09:51

原帖由 nettrottist 于 2008-11-14 08:29 发表

有效,感谢中……能不能把这个获得焦点的时间也设上,比如鼠标放在标签上超过200毫秒以上选择,否则不选。
  1. /* auto focus tab */
  2. var ft_tid=null; var ft_event=null;
  3. function TabMouseOver(e) {
  4.     ft_event = e.target;
  5.     ft_tid = setTimeout("if (ft_event) { \
  6.         gBrowser.selectedTab = ft_event; \
  7.         ft_event = null; }", 200);
  8. }
  9. function TabMouseOut(e) {
  10.     ft_event = null; clearTimeout(ft_tid);
  11. }
  12. getBrowser().mTabBox.addEventListener('mouseout',
  13.     TabMouseOut, false);
  14. getBrowser().mTabBox.addEventListener('mouseover',
  15.     TabMouseOver, false);
复制代码
[ 本帖最后由 golf-at 于 2008-11-14 09:53 编辑 ]
作者: zls123    时间: 2008-11-14 11:23

原帖由 nettrottist 于 2008-11-13 19:59 发表
再问一下楼主,能不能编出光标移动到标签上,这个标签获得焦点调到前台。(省去一次点击)
一直不知道这个是干什么用的
nettrottist  解释一下
作者: zls123    时间: 2008-11-14 11:27

nettrottist
还差个中键恢复刚关闭标签的脚本呢?
作者: nettrottist    时间: 2008-11-14 11:29

原帖由 zls 于 2008-11-14 11:23 发表
原帖由 nettrottist 于 2008-11-13 19:59 发表
再问一下楼主,能不能编出光标移动到标签上,这个标签获得焦点调到前台。(省去一次点击)
一直不知道这个是干什么用的
nettrottist  解释一下 ...
你现在切换标签页是要点击标签的吧,用了这个脚本后只要把鼠标光标指向到标签上就自动切换到该标签上了,无需点击。
作者: zls123    时间: 2008-11-14 11:37

这样跟你介绍的autoclick好像没有什么区别啊
作者: nettrottist    时间: 2008-11-14 11:45

autoclick只针对页面上的链接,不会对标签起效的。知道了么?
作者: zls123    时间: 2008-11-14 12:00

原帖由 nettrottist 于 2008-11-14 11:45 发表
autoclick只针对页面上的链接,不会对标签起效的。知道了么?
那 是我自己记错了 之前我用过另一个脚本 和这个混淆了
话说这个脚本用得不习惯啊 很容易误操作啊
作者: zls123    时间: 2008-11-14 13:07

差个中键恢复刚关闭标签的脚本
我就可以卸载tab mix 了
nettrottist 、golf-at 帮下我啊
作者: nettrottist    时间: 2008-11-14 13:17

  1. this.mItem = document.createElement("menuitem");
  2.     this.mItemSep = document.createElement("menuseparator");
  3.     this.mItem.setAttribute("label", "Undo Close Tab");
  4.     this.mItem.setAttribute("oncommand", "undoCloseTab();");

  5.     document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() { undoCloseTabAdd.onPopupShowing(this); }, false);
  6.   },

  7.   onPopupShowing: function(aPopup)
复制代码
这个可以在右键菜单增加一个“恢复关闭标签”的项。
作者: zls123    时间: 2008-11-14 13:19

习惯用中键了  
nettrottist帮我写个
作者: zls123    时间: 2008-11-14 17:59

golf-at出场啦
作者: golf-at    时间: 2008-11-14 22:23

原帖由 zls 于 2008-11-14 13:07 发表
差个中键恢复刚关闭标签的脚本
我就可以卸载tab mix 了
nettrottist 、golf-at 帮下我啊
已经在二楼改了代码,添加了中键的处理,在标签上点中键关闭标签,空白处点中键恢复关闭的标签页。
作者: golf-at    时间: 2008-11-14 22:25

原帖由 nettrottist 于 2008-11-14 13:42 发表
不熟悉代码,有请golf-at出场。
其实我以前根本不懂javascript的,最近才开始接触。之前做的扩展Hide Caption,是我第一次用javascript写代码。
作者: zls123    时间: 2008-11-15 10:56

第一个还是不能用啊
其他的可以
作者: zls123    时间: 2008-11-15 11:08

高尔夫 出场吧
作者: golf-at    时间: 2008-11-15 11:38

原帖由 zls 于 2008-11-15 10:56 发表
第一个还是不能用啊
其他的可以
我这边好好的,没有任何问题。那段脚本,一共有4段,你可以将4段分别测试,看看什么地方出错了。
作者: zls123    时间: 2008-11-15 12:00

golf
只有bookmark 这段有效
作者: zls123    时间: 2008-11-15 12:09

跟其他的脚本有冲突
作者: nettrottist    时间: 2008-11-15 12:10

楼上找到原因了,跟哪个脚本有冲突来着?说说……
作者: zls123    时间: 2008-11-15 12:10

(function(){const B=document.getElementById("main-window");
if(B){window.maximize();
document.getElementById('toolbar-menubar').appendChild(document.getElementById('window-controls'));
const A=document.getElementById("window-controls");
A.setAttribute("fullscreencontrol","false");
A.setAttribute("hidden","false");
B.setAttribute("hidechrome","true");
while(STATE_NORMAL!==window.windowState){window.restore()}window.moveTo(screen.availLeft,screen.availTop);
window.resizeTo(screen.availWidth,screen.availHeight);
document.getAnonymousElementByAttribute(document.getElementById("status-bar"),"class","statusbar-resizerpanel").setAttribute("hidden","true")}})();
作者: nettrottist    时间: 2008-11-15 12:13

是那个将Firefox标题栏藏起来的脚本吗?
作者: zls123    时间: 2008-11-15 12:32

是啊
作者: zls123    时间: 2008-11-15 12:34

用了楼主的脚本 这个就失效了
而且只有bookmark这段的脚本有效
作者: golf-at    时间: 2008-11-15 12:37

很早我就和  nettrottist 说可能是和其它脚本有冲突,让他临时将其它脚本删除试试看,不过他一直没有做。 zls 的那个脚本是隐藏标题栏,而且大小是整个桌面,不能调整窗口大小。所以我后来才写了一个Hide Caption的扩展,克服脚本的局限。

不过我也没看来哪个地方有冲突。zls 的那个隐藏标题栏脚本有一个小错误,!== 应该是 !=
作者: nettrottist    时间: 2008-11-15 12:43

主要我并不急切地需要从书签和历史左键打击链接的功能。我现在基本只用awesome bar地址栏打开。而我又找到了一个不冲突的地址栏新标签页打开的脚本,所以……

[ 本帖最后由 nettrottist 于 2008-11-15 12:44 编辑 ]
作者: zls123    时间: 2008-11-15 12:44

没有其他的办法吗 ? 哈哈 我现在是脚本至上啊
作者: zls123    时间: 2008-11-15 13:13

这个脚本跟下面这个也有冲突
下面是这个失效的脚本
// ==UserScript==
// @作用: 鼠标放置地址栏,自动全选地址栏
// @作者: idragonet
// ==/UserScript==   

document.getElementById("urlbar").addEventListener("mouseover", function(event) {

   gURLBar.focus();

}, false);
document.getElementById("searchbar").addEventListener("mouseover", function(event) {
var searchbar = document.getElementById("searchbar");
searchbar.focus();
}, false);
作者: golf-at    时间: 2008-11-15 13:49

原帖由 zls 于 2008-11-15 13:13 发表
这个脚本跟下面这个也有冲突
下面是这个失效的脚本
// ==UserScript==
// @作用: 鼠标放置地址栏,自动全选地址栏
// @作者: idragonet
// ==/UserScript==   

document.getElementById("urlbar").addEventListener("mo ...
你这个脚本,只是鼠标放到地址栏或者搜索栏自动激活它们,但是并不会选择其中的文字。和其中的说明不符(说明是“自动全选”)。你究竟是想自动全选,还是自动激活?激活只是得到键盘输入焦点,和文字全选没有关系。

[ 本帖最后由 golf-at 于 2008-11-15 13:51 编辑 ]
作者: zls123    时间: 2008-11-15 14:19

我贴这个脚本没有其他的意思
我想说的是你提供的这个脚本跟我的很多脚本都有冲突,其他的脚本都用不了
作者: zls123    时间: 2008-11-15 14:21

你的脚本是否可以调整一下

作者: qjahz    时间: 2008-11-15 16:14

truncFix扩展的脚本,能不能做成uc.js能用的脚本
  1. var truncFixObs = {
  2.         observe: function(subject, topic, data) {
  3.                 try {
  4.                         var hc = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
  5.                         hc.setResponseHeader("content-disposition", hc.getResponseHeader("content-disposition").replace(/(;\s*filename\s*=\s*)([^\";]+)/, "$1\"$2\""), false);
  6.                 }
  7.                 catch (ex) {
  8.                 }
  9.         }
  10. };

  11. function truncFixInit()
  12. {
  13.         Components.classes["@mozilla.org/observer-service;1"]
  14.                 .getService(Components.interfaces.nsIObserverService)
  15.                 .addObserver(truncFixObs, "http-on-examine-response", false);
  16. }

  17. function truncFixDone()
  18. {
  19.         Components.classes["@mozilla.org/observer-service;1"]
  20.                 .getService(Components.interfaces.nsIObserverService)
  21.                 .removeObserver(truncFixObs, "http-on-examine-response");
  22. }

  23. window.addEventListener("load", truncFixInit, false);
  24. window.addEventListener("unload", truncFixDone, false);
复制代码

作者: golf-at    时间: 2008-11-15 16:43

原帖由 zls 于 2008-11-15 14:19 发表
我贴这个脚本没有其他的意思
我想说的是你提供的这个脚本跟我的很多脚本都有冲突,其他的脚本都用不了
我的脚本和你贴的这个脚本(自动激活地址栏和搜索栏)没有冲突啊,而且我也实际测试了。
作者: golf-at    时间: 2008-11-15 16:45

脚本是否冲突,还是很容易判断的,直接看代码就知道了。除非是复杂的代码,不是很容易看出来,象这儿提到的几个简单的脚本,一眼就可以看出来了,根本没有冲突。
作者: golf-at    时间: 2008-11-15 17:00

比如,地址栏在新标签页打开的代码,我这儿是修改 urlbar 的 handleCommand 函数(替换其中的部分代码)。如果在你的机器上无效,那就说明两个可能:
1) handleCommand 中的JS代码,已经被其它的脚本替代过了,导致我要替换的字符串
     if (aTriggeringEvent instanceof MouseEvent) { 不存在,那样子的话,我的这段代码就不起作用了。
2) 原本调用 urlbar.handleCommand 函数的地方,被其它的脚本替换了,导致这个函数根本不被执行。

你可以在我的代码前添加一句  alert(document.getElementById("urlbar").handleCommand.toString()); 就可以知道是什么原因了:
a) 如果 firefox 启动时显示一个消息框(里面是handleCommand 的代码),那么你就可以看到我的代码执行前他原本的代码了,里面应该不包含字符串 if (aTriggeringEvent instanceof MouseEvent) {,就是上面的第一种情况。
b)根本就没有看到任何消息框,说明是上面说的第二种情况。
作者: zls123    时间: 2008-11-15 18:21

没有看到任何消息框
而且 其他脚本全部失效
作者: zls123    时间: 2008-11-15 18:21

现在可以怎么办呢?
作者: zls123    时间: 2008-11-15 18:30

原帖由 golf-at 于 2008-11-13 17:47 发表
再提供一个脚本:在标签上双击关闭,空白处双击开新标签;在标签上点中键关闭标签,在空白处点中键恢复关闭的页面。
function TabClick(e, DblClick) {
    if (e.ctrlKey || e.shiftKey || e.altKey)
        return;
    i ...
楼主啊 我发现中键的代码有点问题:点一下,恢复了2个tab
作者: golf-at    时间: 2008-11-15 18:38

原帖由 zls 于 2008-11-15 18:30 发表

楼主啊 我发现中键的代码有点问题:点一下,恢复了2个tab
我这边没有问题啊,会不会是你不小心连击了两次?或者其它的脚本也有恢复。
作者: golf-at    时间: 2008-11-15 18:41

原帖由 zls 于 2008-11-15 18:21 发表
没有看到任何消息框
而且 其他脚本全部失效
你是说加了 alert(...) 后,你的脚本全部失效吗?firefox 是什么版本,不会没有urlbar 这个元件吧?
作者: zls123    时间: 2008-11-15 18:46

在加这个alert(...) 之前 ,用这脚本也使其他脚本失效
我的firefox是3.04版
怎么知道有没有urlbar这个元件
作者: golf-at    时间: 2008-11-15 18:47

可以加上 try {} catch() {} 试试看
  1. (function() {
  2.     try {
  3.     alert(document.getElementById("urlbar").handleCommand.toString());

  4.     /*open bookmark in new tab */
  5.     eval("PlacesUIUtils.openNodeIn = " + PlacesUIUtils.openNodeIn
  6.         .toString().replace("openUILinkIn(aNode.uri, aWhere);",
  7.         "if ((gBrowser.currentURI.spec != 'about:blank' ||      \
  8.         gBrowser.webProgress.isLoadingDocument) && (aNode.uri.  \
  9.         indexOf('javascript:') == -1)) {openUILinkIn(aNode.uri, \
  10.         'tab');}else{openUILinkIn(aNode.uri, aWhere);}"));
  11.   
  12.     /*open history in new tab */
  13.     document.getElementById("history-menu").setAttribute(
  14.         "oncommand", "openUILinkIn(event.target.node.uri, 'tab');");

  15.     /*open url in new tab */
  16.     var urlbar = document.getElementById("urlbar");
  17.     eval("urlbar.handleCommand = " + urlbar.handleCommand.toString(
  18.         ).replace('if (aTriggeringEvent instanceof MouseEvent) {',
  19.         '_LoadURL(aTriggeringEvent, postData); return; $&'));

  20.     /*open search in new tab */
  21.     var cName = "@mozilla.org/preferences-service;1";
  22.     var fPref = Components.classes[cName].getService(Components
  23.         .interfaces.nsIPrefService);
  24.     if (fPref.getBoolPref("browser.search.openintab") != true)
  25.         fPref.setBoolPref("browser.search.openintab", true);
  26.     }
  27.     catch(e){
  28.         alert(e);
  29.     }
  30. })();

  31. function _LoadURL(aTriggeringEvent, aPostData)
  32. {
  33.     var where = (gBrowser.currentURI.spec!='about:blank' ||
  34.         gBrowser.webProgress.isLoadingDocument) ? 'tab' :
  35.         'current';
  36.     if (gURLBar.value!='') openUILinkIn(gURLBar.value, where);
  37.     return true;
  38. }
复制代码
[ 本帖最后由 golf-at 于 2008-11-15 18:49 编辑 ]
作者: zls123    时间: 2008-11-15 18:49

kankan
作者: golf-at    时间: 2008-11-15 18:53

原帖由 zls 于 2008-11-15 18:49 发表
kankan
这些参数,除了 browser.urlbar.clickSelectsAll 和 browser.urlbar.doubleClickSelectsAll 外,其它的和我的一样。
作者: golf-at    时间: 2008-11-15 18:56

突然想起来了,只有书签有效的话,可能是你们去掉 历史 菜单了,导致脚本
document.getElementById("history-menu").setAttribute(......)
出错了。
作者: zls123    时间: 2008-11-15 19:09

楼上正解,确实是去掉 历史 菜单的问题
但是搜索和地址栏依然无效 其他的正常,其他脚本也可以用了
作者: nettrottist    时间: 2008-11-15 19:18

哦?我整个菜单栏都隐藏了的。即没有历史菜单,也没有书签菜单了。
作者: zls123    时间: 2008-11-15 19:22

加上 try {} catch()
脚本失效
作者: golf-at    时间: 2008-11-15 20:34

原帖由 nettrottist 于 2008-11-15 19:18 发表
哦?我整个菜单栏都隐藏了的。即没有历史菜单,也没有书签菜单了。
隐藏了只是看不见,菜单还是存在的。但是使用一些扩展或者脚本的话,可能会将历史菜单删除掉。
作者: golf-at    时间: 2008-11-15 20:36

原帖由 zls 于 2008-11-15 19:22 发表
加上 try {} catch()
脚本失效
你现在使用的是我1楼的代码吗?1楼我已经在可能出错的地方加上try {}catch() {} 了。如果脚本无效的话,可以将两个
catch(e) {} 改成 catch(e) { alert(e); } ,这样可以看到错误信息。

[ 本帖最后由 golf-at 于 2008-11-15 20:38 编辑 ]
作者: golf-at    时间: 2008-11-15 20:41

原帖由 zls 于 2008-11-15 19:09 发表
楼上正解,确实是去掉 历史 菜单的问题
但是搜索和地址栏依然无效 其他的正常,其他脚本也可以用了
搜索很简单,我的那个代码,也只是改 firefox 的一个设定,你也可以自己修改一下就行了。
作者: zls123    时间: 2008-11-15 21:54


作者: zls123    时间: 2008-11-15 22:14

搜索的那段代码 原来要 搜索框有内容的时候,在新的标签打开
希望更改一下
作者: golf-at    时间: 2008-11-15 22:26

原帖由 zls 于 2008-11-15 21:54 发表
是其它的某个脚本,将 urlbar.handleCommand 设为 null 了。默认的 firefox 是有这个函数的。
作者: zls123    时间: 2008-11-15 22:29

那现在怎么办啊 高尔夫
作者: golf-at    时间: 2008-11-15 22:30

原帖由 golf-at 于 2008-11-15 22:26 发表

是其它的某个脚本,将 urlbar.handleCommand 设为 null 了。默认的 firefox 是有这个函数的。
我之前一直用3.1b2pre,刚刚用 3.0.4试了一下,发现 3.0.* 没有 urlbar.handleCommand 这个函数。我再看看 3.0.* 下是怎么弄的。
作者: golf-at    时间: 2008-11-15 23:08

原帖由 zls 于 2008-11-15 21:54 发表
现在改好了(修改后的代码见1楼),针对 firefox 3.0.* 和 firefox 3.1 做了不同的处理。
作者: nettrottist    时间: 2008-11-15 23:15

我这里试了还是不行!
作者: golf-at    时间: 2008-11-15 23:24

原帖由 nettrottist 于 2008-11-15 23:15 发表
我这里试了还是不行!
这次我在 firefox 3.0.3, 3.0.4, 3.1b2pre 下都测试了,全部是 OK 的。这次还不行的话,应该就是和其它脚本冲突了。
作者: zls123    时间: 2008-11-16 09:25

成功鸟 谢谢高尔夫
一点点小问题:搜索栏要回车方可在新的tab打开,按放大镜就在原tab打开
作者: nettrottist    时间: 2008-11-16 16:25

http://mozilla.sociz.com/viewthr ... mp;page=1#pid153158

这里有位坛友提供了一个新的脚本,看仍然是某位日本高人写的。
解决了搜索栏按放大镜是在当前标签页打开的缺陷。但是这个脚本有个不理想的地方是:从历史和书签里打开的标签页是在后台新标签页,而不是前台新标签页。请问楼主怎么改法,才能变成是在前台标签页打开呢、

并且这个历史和书签打开,需要是用ctrl shift H或者ctrl shift B弹出的历史和书签,才能在新标签页打开。如果是用侧边栏打开的历史和书签栏,是在当前书签打开的!

而且又发现了一个问题:用了这个之后,原来我用的“自动清空搜索栏并返回默认搜索引擎”的脚本就完全失效了!

[ 本帖最后由 nettrottist 于 2008-11-16 16:34 编辑 ]
作者: zls123    时间: 2008-11-16 19:06

确实搜索引擎”的脚本完全失效
后台新标签页,不错
作者: golf-at    时间: 2008-11-16 23:21

原帖由 nettrottist 于 2008-11-16 09:38 发表
一点点小问题:搜索栏要回车方可在新的tab打开,按放大镜就在原tab打开

啊,我还以为这个脚本能克服这个毛病呢?我用下面的办法


结果也一样,按放大镜在当前tab打开。 ...
我已在1楼修改了代码,现在点击放大镜也在新标签页打开搜索了。
作者: nettrottist    时间: 2008-11-17 08:25

原帖由 golf-at 于 2008-11-15 13:49 发表

你这个脚本,只是鼠标放到地址栏或者搜索栏自动激活它们,但是并不会选择其中的文字。和其中的说明不符(说明是“自动全选”)。你究竟是想自动全选,还是自动激活?激活只是得到键盘输入焦点,和文字全选没有关系。 ...
你写一个鼠标放到地址栏或者搜索栏,就自动全选文字的吧!这个功能还是很节省人力。
作者: qjahz    时间: 2008-11-17 10:28

1楼脚本和锁定标签页脚本有冲突,转到上一页、下一页功能无法用了
作者: 2zhang    时间: 2008-11-17 10:31

6页啊,整明白没有?
作者: golf-at    时间: 2008-11-17 11:06

原帖由 qjahz 于 2008-11-17 10:28 发表
1楼脚本和锁定标签页脚本有冲突,转到上一页、下一页功能无法用了
我也不知道其他人写的锁定标签页的脚本是什么样子,我在1楼和2楼的脚本代码,都非常简单,别的脚本怎么写的,我就管不了那么多啦。
作者: zls123    时间: 2008-11-17 11:20

原帖由 nettrottist 于 2008-11-17 08:25 发表

你写一个鼠标放到地址栏或者搜索栏,就自动全选文字的吧!这个功能还是很节省人力。
  1. // ==UserScript==
  2. // @作用: 鼠标放置地址栏,自动全选地址栏
  3. // @作者: idragonet
  4. // ==/UserScript==   

  5. document.getElementById("urlbar").addEventListener("mouseover", function(event) {

  6.    gURLBar.focus();

  7. }, false);
  8. document.getElementById("searchbar").addEventListener("mouseover", function(event) {
  9. var searchbar = document.getElementById("searchbar");
  10. searchbar.focus();
  11. }, false);
复制代码
[ 本帖最后由 zls 于 2008-11-17 11:23 编辑 ]
作者: golf-at    时间: 2008-11-17 11:48

之前我就说了,上面的代码,只是将地址栏和搜索栏自动取得输入焦点,并没有自动选择里面的文字。自动选择地址栏和搜索栏里面的文字的代码如下:
  1. document.getElementById("urlbar").addEventListener("mouseover",
  2.     function(e) { document.getElementById("urlbar").select(); },
  3.     false);
  4. document.getElementById("searchbar").addEventListener("mouseover",
  5.     function(e) { document.getAnonymousElementByAttribute(document
  6.     .getElementById("searchbar"), "class", "searchbar-textbox").
  7.     select(); }, false);
复制代码
不过已经偏离这个帖子主题了,这个帖子本来是讨论在新标签页打开链接的,用来取代标签扩展用的。
作者: zls123    时间: 2008-11-17 11:52

楼主 按我自己的要求 现在的确可以不用tab类的扩展了

作者: Chappell    时间: 2008-11-19 22:56

原帖由 golf-at 于 2008-11-15 12:37 发表
不过我也没看来哪个地方有冲突。zls 的那个隐藏标题栏脚本有一个小错误,!== 应该是 !=
这是错误?
作者: nettrottist    时间: 2008-11-20 10:33

让侧边栏书签和历史在新标签页打开的脚本

这个脚本解决了用ctrl+B和ctrl+H分别调出的侧边栏形式的书签和历史,在新标签页打开的问题。
作者: hpcex    时间: 2008-11-23 11:24

搜索栏在新窗口中打开还有个小问题啊 如果当前页是空白页不能在空白页打开
作者: golf-at    时间: 2008-11-23 13:17

原帖由 沙滩凉鞋 于 2008-11-19 22:56 发表
这是错误?
我用javascript写代码,还是最近的事情,而且也只是在firefox的两个论坛中才用javascript写了一些代码,工作中不用javascript。以前在别的代码和范例中从来没有看过 !== 这个运算符。刚才看了 javascript 的参考手册,才知道有 ===  和 !== 这两个运算符,这应该也是 javascript 中才有的吧。javascript 中只定义变量,没有变量类型,所以才引入了这两个特殊的运算符吧。
作者: nettrottist    时间: 2008-11-23 19:24

用了楼主这个脚本,从我的足迹的书签和历史中打开的链接,还有从书签工具栏打开的链接,都是在后台标签页打开的。你们是前台还是后台啊?要怎么改才能让他们在前台打开!
作者: qjahz    时间: 2008-11-24 07:00

原帖由 nettrottist 于 2008-11-23 19:24 发表
用了楼主这个脚本,从我的足迹的书签和历史中打开的链接,还有从书签工具栏打开的链接,都是在后台标签页打开的。你们是前台还是后台啊?要怎么改才能让他们在前台打开! ...
about:config
browser.tabs.loadInBackground false
作者: nettrottist    时间: 2008-11-24 08:24

上面这个项我本来就设置成了false
作者: golf-at    时间: 2008-11-24 08:50

原帖由 nettrottist 于 2008-11-23 19:24 发表
用了楼主这个脚本,从我的足迹的书签和历史中打开的链接,还有从书签工具栏打开的链接,都是在后台标签页打开的。你们是前台还是后台啊?要怎么改才能让他们在前台打开! ...
browser.tabs.loadBookmarksInBackground 设为 false
作者: nettrottist    时间: 2008-11-24 08:56

这个我也已经设定成了false。
我觉得脚本真的很奇怪。有时候会有效,有时候会失效。
我昨天不就转用了一下3.1beta2(共用一个profile)。再转回3.o.4。原来楼主提供的不起效的在新标签页打开的脚本,现在在3.0.4起效。但是会出现在背景打开的问题。原来在3.0.4里有效的搜索完成后清空搜索效果再返回默认引擎,现在这么一转就无效了!!

搞不懂,难怪说维护脚本比较困难。
作者: qjahz    时间: 2008-11-24 10:05

原帖由 nettrottist 于 2008-11-24 08:56 发表
这个我也已经设定成了false。
我觉得脚本真的很奇怪。有时候会有效,有时候会失效。
我昨天不就转用了一下3.1beta2(共用一个profile)。再转回3.o.4。原来楼主提供的不起效的在新标签页打开的脚本,现在在3.0.4起效。但是 ...
楼主用同一个配置文件,某些about:config转用就重置了吧,搜索栏、书签新标签页打开脚本3.1和3.0我用起来正常,地址栏在当前标签页打开

[ 本帖最后由 qjahz 于 2008-11-24 10:31 编辑 ]
作者: qjahz    时间: 2008-11-24 10:20

切换搜索引擎后自动搜索3.1 11月23日版会多打开个新标签页,昏
  1. (function() {
  2.     var searchbar = document.getElementById("searchbar");
  3.     eval("searchbar.select = "
  4.          + searchbar.select.toString().replace(/}$/,
  5.            "if(this.getAttribute('empty') != 'true' &&\
  6.            this.textbox.value.length)\
  7.            this.textbox.onTextEntered();\
  8.            }")
  9.         );
  10. })();
复制代码





© 2004-2009 Mozest.com