Firefox Extension page-mod onAtttach很慢

时间:2016-04-18 15:23:01

标签: javascript firefox-addon firefox-addon-sdk

我正在使用Firefox Add-on SDK来构建扩展,以尽快捕获用户输入的URL。因为,我在tabs API [找到loadactivate等]中找不到任何内容,这会让我尽快访问我正在使用的网址page-mod。< / p>

我观察到,由于重定向非常快,因此快速重定向onAttach无法捕获初始的少量网址。

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

如何捕获初始URL,或者是否有其他API可以帮助我实现扩展的实际意图。请注意我不是在谈论与我的内容脚本的交互。完成几次重定向后,console.log打印基本上缺少初始重定向。

2 个答案:

答案 0 :(得分:2)

PageMod或标签API不是为了查看HTTP重定向而构建的,我猜这是非常快速重定向的意思。在发出有关操作的事件之前,这两个API都需要有效的页面加载,因此您无法获得人员在URL栏中键入的值。

如果您想捕获在URL栏中输入的URL,您可以查看places事件系统。 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);
  }
})

答案 1 :(得分: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);