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

Redirect URL from local filesystem to internet with FireFox extension

我的计算机上有几个包含 link 其他页面的 PDF 文件。然而,那些 links 会将您定向到本地文件系统而不是互联网。 IE。单击 link 将打开浏览器并将您带到 file:///page 而不是 http://domain/page

修改这些文件以包含完整的 URL 不是一种选择。

我尝试使用可用的 Firefox 扩展来重定向 URL,但 none 有效,所以我尝试创建自己的扩展来执行相同的操作。到目前为止我发现 URL 在选项卡的 "ready" 事件触发之前无法访问,但是引用没有完整路径的本地文件的页面总是 "uninitialized."

这是我的扩展脚本,几乎直接来自 https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs:

var tabs = require("sdk/tabs");
tabs.on('open', function(tab){
    tab.on('ready', function(tab){
        if (tab.url.indexOf("file:///page") != -1) {
            tab.url = tab.url.replace("file://", "https://domain");
        }
    });
});

知道如何将页面从本地文件重定向到另一个位置吗?

以下代码片段对我来说效果很好。 在 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;
    }
});

尽管如此,当 url 符合您的要求时,我的 Firefox 并没有在我的选项卡上触发就绪事件。例如,当 url 为 file:///page/lala.pdf 时,firefox 会忽略 url 并且不会尝试访问它。 我相信 Firefox 想要一个 "real" 路径来加载页面,例如 file:///C:page/lala.pdf.

希望对您有所帮助。

我发现最简单的方法实际上来自另一个 Whosebug 答案...Get Content of Location Bar。使用该答案中的函数检索 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");
        }
    });
});