使用FireFox扩展将URL从本地文件系统重定向到internet

使用FireFox扩展将URL从本地文件系统重定向到internet,url,redirect,firefox-addon,local,Url,Redirect,Firefox Addon,Local,我的计算机上有几个PDF文件,其中包含指向其他页面的链接。但是,这些链接将您指向本地文件系统而不是internet。即,单击链接打开浏览器并将您带到file:///page而不是http://domain/page 修改这些文件以包含完整的URL不是一个选项 我尝试使用可用的Firefox扩展重定向URL,但没有一个成功,所以我尝试创建自己的扩展来实现同样的目的。到目前为止,我发现在选项卡的“就绪”事件触发之前,URL是无法访问的,但是引用没有完整路径的本地文件的页面总是“未初始化” 这是我的扩

我的计算机上有几个PDF文件,其中包含指向其他页面的链接。但是,这些链接将您指向本地文件系统而不是internet。即,单击链接打开浏览器并将您带到
file:///page
而不是
http://domain/page

修改这些文件以包含完整的URL不是一个选项

我尝试使用可用的Firefox扩展重定向URL,但没有一个成功,所以我尝试创建自己的扩展来实现同样的目的。到目前为止,我发现在选项卡的“就绪”事件触发之前,URL是无法访问的,但是引用没有完整路径的本地文件的页面总是“未初始化”

这是我的扩展脚本,几乎直接来自:


你知道如何将页面从本地文件重定向到其他位置吗?

下面的代码片段适合我。 在
main.js
中:

var tabs = require("sdk/tabs");
tabs.on('ready', function(tab){
    var new_url = tab.url;
    if (tab.url.indexOf("file:///") != -1) {
        new_url = new_url.replace("file:///", "https://domain/");
        tab.url = new_url;
    }
});
尽管如此,我的Firefox并没有在url与您想要的内容类似时在我的选项卡上触发ready事件。例如,当url为
file:///page/lala.pdf
,firefox忽略url,不尝试访问它。 我相信Firefox需要一个“真实”的路径来加载页面,比如
file:///C:page/lala.pdf


我希望这能对你有所帮助。

我找到的最简单的方法实际上是从另一个答案。使用该答案中的函数检索URL,然后根据该URL重定向。因此,我得出以下结论:

var tabs = require("sdk/tabs");
tabs.on('open', function(tab){
    tab.on('activate', function(tab){
        var { getMostRecentWindow } = require("sdk/window/utils");
        var urlBar = getMostRecentWindow().document.getElementById('urlbar');
        if (urlBar.value.indexOf("file:///page/") != -1) {
            tab.url = urlBar.value.replace("file://", "https://domain");
        }
    });
});

问得好,我也很想看到答复。在修改请求上使用
http
可能无法捕捉到这一点,因为它是一个文件uri,对吗?如果这不起作用,那么我认为应该使用
nsIWebProgressListener
,但这不是sdk,看起来您正在使用sdk插件。让我们来看看SDK开发人员是否可以启发我们,否则我将与您共享nsIWebProgressListener,您可以通过阅读此处获得一个快速启动:是的,当您引用本地文件并包含完整路径时,即C:…,您会出现“未找到文件”错误,并且可以检索URL。不幸的是,文件中的链接只是相对的,因此不包括完整路径。因此,您将获得
file:///page/lala.aspx?.....
就绪状态为“未初始化”,URL为“关于:空白”。
var tabs = require("sdk/tabs");
tabs.on('open', function(tab){
    tab.on('activate', function(tab){
        var { getMostRecentWindow } = require("sdk/window/utils");
        var urlBar = getMostRecentWindow().document.getElementById('urlbar');
        if (urlBar.value.indexOf("file:///page/") != -1) {
            tab.url = urlBar.value.replace("file://", "https://domain");
        }
    });
});