javascript - Firefox 扩展 page-mod onAttach 速度很慢

标签 javascript firefox-addon firefox-addon-sdk

我正在使用 Firefox Add-on SDK 构建一个扩展来尽快捕获用户输入的 URL。因为,我在 tabs API 中没有找到任何东西 [找到 loadactivate 等],这将使我能够尽快访问我的 URL我正在使用page-mod

我观察到,如果重定向非常快,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);
  }
})

关于javascript - Firefox 扩展 page-mod onAttach 速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698199/

相关文章:

javascript - Firefox 扩展错误 (chrome.manifest)

javascript - 通过 Firefox 插件将剪贴板中的数据添加到页外输入

javascript - 有没有一种直接的方法可以使用 jQuery 将文本附加到 DOM 元素?

php - 禁用对用户评论的多重投票

debugging - 从引导的 Firefox4 扩展调试打印

google-analytics - 如何在 Firefox 浏览器中测试 Google Analytics?

javascript - contentScript : self. on ('click' , function() { tabs.open(url) }) - 我无法在此处打开新选项卡

firefox-addon-sdk - 在用户分支中设置首选项并在卸载时取消设置

javascript - 在 Javascript onClick 事件中传递参数

javascript - AngularJS 组件 - 如何传入后端变量?