我正在使用Firefox Add-on SDK来构建扩展,以尽快捕获用户输入的URL。因为,我在tabs
API [找到load
,activate
等]中找不到任何内容,这会让我尽快访问我正在使用的网址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
打印基本上缺少初始重定向。
答案 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);