2012-04-26 161 views
1

我試圖通過創建Mozilla附加在生成器的插件。我需要知道的是如何獲得通過附加的活動標籤左點擊鏈接的URL,並在新標籤中打開它。如何獲取點擊鏈接的URL?

我知道涉及通過一個頁面-MOD添加事件偵聽,然後使用標籤模塊這個過程中,但我似乎無法得到正確的語法。

編輯:(這是我迄今爲止)

var Widget = require("widget").Widget; 
var tabs = require('tabs'); 
var pageMod = require("page-mod"); 

exports.main = function() { 


    pageMod.PageMod({ 
    include: '*', 
    contentScriptWhen: 'ready', 
    contentScript: "window.addEventListener('click', function(event) { self.port.emit('click',event.target.toString())},false)", 
    onAttach: function(worker) { 
     worker.port.on("click", function(urlClicked) { 
      tabs.open(urlClicked); 

     }); 
    } 

    }); 

}; 
+2

您能告訴我們您嘗試過什麼嗎?該方法是正確的,所以如果沒有你的代碼,我不能告訴你你犯了什麼錯誤。只有懷疑您嘗試使用內容腳本中的「tabs」模塊,而不是將消息發送回擴展程序,以便它可以執行此操作。 – 2012-04-26 07:48:07

+0

弗拉基米爾,我haved編輯我原來的職位,包括我到目前爲止的代碼。我所需要的是能夠獲得點擊鏈接的網址,然後能夠操作該網址的一部分來形成不同的鏈接,然後將打開一個新的標籤。現在有道理? – Cuyware 2012-04-26 21:50:33

回答

0

你必須有正確的大多是和對我的作品的代碼。但是,您的內容腳本代碼存在兩個問題:

  • 它需要調用event.preventDefault()以防止瀏覽器關注鏈接。否則,鏈接頁面將被加載到當前選項卡和擴展名打開的新選項卡中。
  • 它不檢查event.target是否實際上是一個鏈接。它可能是鏈接的子節點,也可能不是鏈接。

總之,你的內容腳本應該是這樣的:

window.addEventListener("click", function(event) 
{ 
    var link = event.target; 
    while (link && link.localName != "a") 
    link = link.parentNode; 

    if (link) 
    { 
    self.port.emit("click", link.href); 
    event.preventDefault(); 
    } 
}, false); 

對於這樣一個不平凡的內容腳本,你不應該使用contentScript參數,而是把它放到在其自己的文件data/目錄。然後,您可以在構建面板時使用contentScriptFile參數:

contentScriptFile: require("self").data.url("contentScript.js"), 
+0

弗拉基米爾,這似乎是工作。我還有一個問題。當我點擊谷歌文檔中使用https的鏈接時,我得到一個安全錯誤,說「安全錯誤:https:***的內容可能無法從https:***加載數據,星星代表一個url。你知道嗎?是否會導致這種情況?還有一種方法可以確定文件是否被點擊,例如PDF文件嗎? – Cuyware 2012-04-27 17:31:57

+0

@Cuyware:我確定安全錯誤與您的擴展無關 - 這是一些Google內部問題。至於識別PDF文件 - 這是不可能的,至少在文件開始下載之前 – 2012-04-27 20:51:38

+0

我認爲href目標在標題中會有.pdf,所以我想有一種方法可以測試這個。 – Cuyware 2012-04-27 21:05:23