2016-04-18 9 views
0

FirefoxアドオンSDKを使用して、できるだけ早くユーザーが入力したURLを取得する拡張機能をビルドしています。以来、私はtabs API [見つけたloadactivateなど]で何も見つからなかったので、私はpage-modを使用しているURLにすぐにアクセスできます。Firefox拡張機能page-mod onAtttachが遅い

非常に高速なリダイレクトの場合、リダイレクトが非常に高速であるため、ほとんどの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のURLをキャプチャ、または拡張子の私の実際の意思で私を助けることができる別のAPIがあることができます。私はコンテンツスクリプトとのやりとりについては言及していません。 console.logは、いくつかのリダイレクトが基本的に最初のものが欠落した後に印刷します。

答えて

2

PageModまたはタブAPIはHTTPリダイレクトを表示するために作成されていませんが、非常に高速なリダイレクトを意味すると思います。これらのAPIは両方とも、アクションに関するイベントを発行する前に有効なページの読み込みが必要であるため、人がURLバーに入力する値を取得しません。

URLバーに入力された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); 
は、
関連する問題