Javascript 带有链接标签的Firefox插件预取

Javascript 带有链接标签的Firefox插件预取,javascript,firefox-addon,mozilla,Javascript,Firefox Addon,Mozilla,我正在尝试创建一个简单的Firefox插件来预取一些网页。我想使用Firefox的link标签来进行预取,因为这似乎是最简单的方法。这是我的密码: main.js: exports.main = function() { var commentFinder = pageMod.PageMod({ include: "*", contentScriptFile: data.url("prefetch.js"), attachTo: ["top

我正在尝试创建一个简单的Firefox插件来预取一些网页。我想使用Firefox的link标签来进行预取,因为这似乎是最简单的方法。这是我的密码:

main.js:

exports.main = function() {
    var commentFinder = pageMod.PageMod({
        include: "*",
        contentScriptFile: data.url("prefetch.js"),
        attachTo: ["top"],
        onAttach: function(worker) {
            worker.port.emit("init");
        }
    });
}
prefetch.js:

var start = '<link rel="prefetch" href="';
var end = '">'
var links = [];
var aTags = document.body.getElementsByTagName("a")

for(var i=0; i<aTags.length; i++){
    var href = aTags[i].getAttribute("href");
    if(links.indexOf(href) == -1) 
        links.push(href);
}

for(var i=0;i<links.length;i++){
    console.log(links[i]);
    var tag = start + String(links[i]) + end;
    document.head.innerHTML = tag + document.head.innerHTML;
}
var start=''
var-links=[];
var aTags=document.body.getElementsByTagName(“a”)

对于(var i=0;i我查看了代码,发现
元素只有在解析器仍然处于活动状态时才会被处理(请参见()的调用图)。因此,当在网站中使用内联脚本时,它才起作用,而不是使用常规的
页面mod

您可以尝试更早地附加脚本,即在页面mod选项中添加
contentScriptWhen:“start”
。但是您应该知道,此时DOM中只有document元素,没有其他元素,因此您需要让脚本等待其他节点

另一种选择是,您可以使用,而不是创建
元素,方法是让内容脚本消息将链接/引用列表传递到
main.js
,然后通过
require(“chrome”)
调用服务

旁白:从带宽和性能的角度来看,无条件预取所有链路可能不是最好的主意


另外:并非所有链接都可以预取(
mailto:
etc)。

此代码在哪里运行?在哪里(到哪个DOM)您是否尝试添加链接标签?我们可以提供一个完整的代码示例吗?我已经更新了代码。它正在作为Firefox加载项的一部分运行。我确定如何回答您的问题。在Firefox中查看页面表明正在添加标签。您可以谈论使用
nsIPrefetchService
。我想,您可以提供一个代码片段吗“我一直在找,但找不到有关如何执行此操作的任何信息。谢谢!