2016-04-18 7 views
0

Ich verwende Firefox Add-on SDK, um eine Erweiterung zu erstellen, um die vom Benutzer eingegebene URL so schnell wie möglich zu erfassen. Da habe ich nichts in tabs API [gefunden load, activate usw.] gefunden, die mir so schnell wie möglich Zugriff auf die URL geben werde, die ich page-mod benutze.Firefox Erweiterung page-mod onAttach ist langsam

Ich habe beobachtet, dass incase von sehr schnellen Weiterleitungen onAttach ist nicht in der Lage, die ersten paar URLs zu erfassen, weil die Weiterleitungen sehr schnell sind.

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 ... 
    } 
    ... 
}); 

Wie kann ich die intial URLs erfassen, oder gibt es eine andere API, die mir mit meiner eigentlichen Absicht der Erweiterung helfen können. Bitte beachten Sie, ich spreche nicht über die Interaktion mit meinem Content-Skript. Die console.log Drucke nach ein paar Weiterleitungen sind im Wesentlichen die ursprünglichen fehlt.

Antwort

2

PageMod oder die Tabs-API sind nicht dafür ausgelegt, HTTP-Weiterleitungen zu sehen. Ich nehme an, dass Sie das mit sehr schnellen Umleitungen meinen. Beide dieser APIs erfordern eine gültige Seitenladung, bevor ein Ereignis über die Aktion ausgegeben wird, sodass Sie nicht die Werte erhalten, die eine Person in die URL-Leiste eingibt.

Wenn Sie erfassen möchten, welche URLs in die URL-Leiste eingegeben wurden, können Sie sich das Ereignissystem für Orte ansehen. Orte ist die Datenbank, die den gesamten Firefox-Verlauf und die Lesezeichen verarbeitet, sodass die Verlaufsereignisse ausgelöst werden, wenn eine neue Seite in die URL-Leiste eingegeben oder über einen Link aufgerufen wird.

Hier einige Code, den Sie zu erhalten begonnen:

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);