2016-04-18 70 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);