MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-21, 19:37

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 6 篇文章 ] 
發表人 內容
文章發表於 : 2010-08-05, 18:06 
離線

註冊時間: 2005-10-11, 20:03
文章: 17
用firegesture開啟的新分頁都沒辦法被tab kit分類

問題應該是卡在firegesture是直接開一個新的空分頁再輸入網址
而不是用現有的分頁去開新分頁
才會有這個問題

我有在網路上找了腳本
但是沒辦法開新分頁
不知道還有沒有什麼解決方法
PS:我用的是搖擺手勢
代碼:
// Open Link in New Tab [Alternative] (Tab in Background)
// Opens a new tab by faking a click on the link.

const IN_FOREGROUND = false;

// Check if it's a link the gesture started from, if yes open link in new tab
if (FireGestures.getLinkURL(FireGestures.sourceNode)) {
  // Create a click event
  var event = document.createEvent("MouseEvents");
  event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
    // Control key - true to open new tab,
    // else current tab is used
    true,
    // Alt key - unnecessary for this script
    false,
    // Shift key - true to open in new window,
    // or if ctrl is pressed open the tab in
    // foreground, else opened in background
    IN_FOREGROUND,
    false, 0, null);
  // Dispatch the event for the "clicked" link
  FireGestures.sourceNode.dispatchEvent(event);
}


最後由 clspeter 於 2010-08-06, 16:55 編輯,總共編輯了 1 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-06, 11:34 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
clspeter 寫:
用firegesture開啟的新分頁都沒辦法被tab kit分類

問題應該是卡在firegesture是直接開一個新的空分頁再輸入網址
而不是用現有的分頁去開新分頁
才會有這個問題

我有在網路上找了腳本
但是沒辦法開新分頁
不知道還有沒有什麼解決方法
PS:我用的是搖擺手勢

簡單看了一下 firefox 和 FireGestures 的 source.
在 firefox 裡面 chrome\browser\content\browser\nsContextMenu.js
右鍵選單裡面新分頁開啟是用到下面這一段:(開啟後可以被tab kit 作 grouping)
代碼:
  // Open linked-to URL in a new tab.
  openLinkInTab: function() {
    openNewTabWith(this.linkURL, this.target.ownerDocument, null, null, false);
  },

在 firefox 裡面 chrome\browser\content\browser\utilityOverlay.js
上面的code接到的是下面這一段:
代碼:
function openNewTabWith(aURL, aDocument, aPostData, aEvent,
                        aAllowThirdPartyFixup, aReferrer)
{
  if (aDocument)
    urlSecurityCheck(aURL, aDocument.nodePrincipal);

  var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
                          .getService(Components.interfaces.nsIPrefService);
  prefSvc = prefSvc.getBranch(null);

  // should we open it in a new tab?
  var loadInBackground = true;
  try {
    loadInBackground = prefSvc.getBoolPref("browser.tabs.loadInBackground");
  }
  catch(ex) {
  }

  if (aEvent && aEvent.shiftKey)
    loadInBackground = !loadInBackground;

  // As in openNewWindowWith(), we want to pass the charset of the
  // current document over to a new tab.
  var wintype = document.documentElement.getAttribute("windowtype");
  var originCharset;
  if (wintype == "navigator:browser")
    originCharset = window.content.document.characterSet;

  // open link in new tab
  var referrerURI = aDocument ? aDocument.documentURIObject : aReferrer;
  var browser = top.document.getElementById("content");
  return browser.loadOneTab(aURL, {
                            referrerURI: referrerURI,
                            charset: originCharset,
                            postData: aPostData,
                            inBackground: loadInBackground,
                            allowThirdPartyFixup: aAllowThirdPartyFixup});
}


然後 FireGestures 裡面的 browser.js
FireGestures開新分頁是用下面這一段:(開啟後不會被tab kit 作 grouping)
代碼:
   _performAction: function(event, aCommand) {
...
...
         case "FireGestures:OpenLinkInBgTab":
         case "FireGestures:OpenLinkInFgTab":
            var linkURL = this.getLinkURL();
            if (!linkURL)
               throw this._getLocaleString("ERROR_NOT_ON_LINK");
            var doc = this.sourceNode.ownerDocument;
            this.checkURL(linkURL, doc);
            var charset = window.content.document.characterSet;
            var referer = makeURI(doc.location.href);
            var background = aCommand == "FireGestures:OpenLinkInBgTab";
            gBrowser.loadOneTab(linkURL, referer, charset, null, background, false);
            break;
...
...
   },

看來呼叫的東西是一樣的(gBrowser.loadOneTab);
有試改成 var referer = doc.documentURIObject; 沒用, 不太清楚 tab kit裡面用來group的依據是啥.
應該說真的有其他套件在開分頁的動作上能跟tab kit互動(被tab kit作group分類)的嗎?
有的話也許可以從code裡面找出正確的寫法。

另,在 tab kit 的 tabkit.js 裡面有一段:
代碼:
this.preInitSortingAndGroupingMethodHooks = function preInitSortingAndGroupingMethodHooks(event) {
...
...
}

感覺上只有透過這裡面寫的幾個動作(ex: nsContextMenu.prototype.openLinkInTab、nsContextMenu.prototype.openFrameInTab 等)
能被用Opener(開啟者) 的方式 grouping。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-06, 13:38 
離線

註冊時間: 2005-02-16, 11:07
文章: 575
因為 FireGesture 是用開啟新分頁來載入URL,所以將下列這個 TabKit 選項勾起來即可。
TabKit 選項
-> Advanced (進階)
-> When grouping tabs by opener (當群組分頁由開啟者開啟時...)
-> Treat blank new tabs as related to the current tab (將新開的空白分頁視為關連到當前的分頁) 勾起來。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-06, 16:40 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
到 FireGestures 裡面加入自己的腳本,試過是可以用。
代碼:
try{tabkit.addingTab("related");}catch (ex) {}
var srcNode = FireGestures.sourceNode;
var linkURL = FireGestures.getLinkURL(srcNode);
if (!linkURL)
  throw FireGestures._getLocaleString("ERROR_NOT_ON_LINK");
var doc = srcNode.ownerDocument;
var charset = window.content.document.characterSet;
var referer = makeURI(doc.location.href);
var background = true; //在背景開啟
gBrowser.loadOneTab(linkURL, referer, charset, null, background, false);
try{tabkit.addingTabOver();}catch (ex) {}

我是替代掉[用新分頁開啟鏈結(背景分頁)]這一個

修一下,從FireGestures裡面copy出來後漏改的地方。
throw FireGestures._getLocaleString("ERROR_NOT_ON_LINK");


最後由 ettoolong 於 2010-08-06, 18:41 編輯,總共編輯了 2 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-06, 16:53 
離線

註冊時間: 2005-10-11, 20:03
文章: 17
謝謝大家的回答
原來tab kit裡面就有選項可以用了
不過當初看到"當群組分頁由開啟者開啟時..."
真的會完全不了解他的意思
但是會造成搜尋也是會編在同一組

樓上的腳本確定可以使用
感謝大家


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-06, 19:07 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
補一個比較正確的腳本寫法:

代碼:
try{tabkit.addingTab("related");}catch (ex) {}
FireGestures._performAction(event, "FireGestures:OpenLinkInFgTab");
try{tabkit.addingTabOver();}catch (ex) {}


直接轉呼叫FireGestures內寫好的腳本。
先用 tabkit.addingTab("related"); 這行告訴 tab kit接下來要開的分頁要和這一頁作群組,
再來中間插你開分頁的code,
最後用tabkit.addingTabOver();把群組動作結束。

至於 "FireGestures:OpenLinkInFgTab" 這個字串可以在
FireGestures 套件的 firegestures\browser.rdf 裡面找到,修改字串就可以轉呼叫所有 FireGestures 內建的對應腳本。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 6 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 27 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群