我正在使用 Firefox Add-on SDK 构建一个扩展来尽快捕获用户输入的 URL。因为,我在 tabs
API 中没有找到任何东西 [找到 load
、activate
等],这将使我能够尽快访问我的 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/