Firefox扩展页面modonAtttach很慢

Firefox Extension page-mod onAtttach is slow

本文关键字:modonAtttach 很慢 扩展 Firefox      更新时间:2023-09-26

我正在使用Firefox插件SDK构建一个扩展,以尽快捕获用户输入的URL。由于,我在tabs API中找不到任何内容[找到了loadactivate等],这将使我能够尽快访问我正在使用的page-mod的URL。

我观察到,在重定向非常快的情况下,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 ...
  }
  ...
});

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

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);
  }
})
/*
 * 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);