2016-04-18 68 views
0

我正在使用Firefox附加SDK來構建一個擴展來捕獲用戶儘快輸入的URL。因爲我在tabs API [找到load,activate等]中找不到任何東西,這將使我可以快速訪問我使用的網址page-modFirefox擴展頁面模式onAtttach很慢

我發現很快的重定向onAttach無法捕獲初始幾個URL,因爲重定向非常快。

index.js

var pageMod = require("sdk/page-mod"); 

pageMod.PageMod({ 

include: ['*'], 
contentScriptWhen: 'start', 
contentScriptFile: data.url("mycontscript.js"), 
attachTo: "top", 
onAttach: function(worker) { 
    var tabUrl = worker.tab.url; 
    console.log('User typed ' + tabUrl); 
    ... Interact with content script ... 
    } 
    ... 
}); 

我怎樣才能捕捉到INTIAL網址,或者是有其他的API,它可以幫助我與我的實際擴展的意圖。請注意我不是在談論與我的內容腳本的互動。幾個重定向完成後,console.log打印基本上缺少初始部分。

回答

2

PageMod或選項卡API不是爲了查看HTTP重定向而構建的,我猜這就是您所說的非常快速的重定向。這兩種API在發佈有關該操作的事件之前都需要有效的頁面加載,因此您不會獲得某個用戶輸入到URL欄中的值。

如果您想要捕獲輸入到網址欄中的哪些網址,您可以查看地點事件系統。 Places是處理所有Firefox歷史記錄和書籤的數據庫,因此當新的頁面輸入到URL欄或通過鏈接導航時,歷史事件將被觸發。

下面是一些代碼,讓你開始:

const { events } = require('sdk/places/events'); 
// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsINavHistoryService#Transition_type_constants 
const TRANSITION_REDIRECT_PERMANENT = 5; 
const TRANSITION_REDIRECT_TEMPORARY = 6; 

events.on('data', function({type, data}) { 
    if (type === 'history-visit') { 
     if (data.transitionType === TRANSITION_REDIRECT_PERMANENT || 
      data.transitionType === TRANSITION_REDIRECT_TEMPORARY) { 
     console.log('redirect'); 
     } 
    console.log(data.url); 
    } 
}) 
0
/* 
* contentScriptWhen: "start" 
* 
* "start": Load content scripts immediately after the document 
* element is inserted into the DOM, but before the DOM content 
* itself has been loaded 
*/ 

/* 
* use an empty HTMLElement as a way to prevent 
* the DOM content from loading 
*/ 
document.replaceChild(
    document.createElement("html"), document.children[0]); 

/* 
* do whatever you want here 
*/ 

/* then reload the current page from the server */ 
document.location.reload(true);