【问题标题】:Redirect URL from local filesystem to internet with FireFox extension使用 FireFox 扩展将 URL 从本地文件系统重定向到 Internet
【发布时间】:2015-09-30 18:46:45
【问题描述】:

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

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

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

这是我的扩展脚本,几乎直接来自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");
        }
    });
});

任何想法如何将页面从本地文件重定向到另一个位置?

【问题讨论】:

  • 好问题,我也渴望看到答复。使用 http-on-modify-request 可能无法捕捉到这一点,因为它是一个文件 uri,对吧?如果这不起作用,那么我认为要走的路是nsIWebProgressListener,但那是非sdk,看起来你正在做一个SDK插件。让我们拭目以待,看看 SDK 开发人员是否可以启发我们,否则我将与您分享 nsIWebProgressListener,您可以通过阅读此处获得快速入门:developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/…

标签: url redirect firefox-addon local


【解决方案1】:

以下 sn-p 适合我。 在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 并没有在我的选项卡上触发 ready 事件。例如,当 url 为 file:///page/lala.pdf 时,firefox 会忽略该 url,并且不会尝试访问它。 我相信 Firefox 想要一个“真实”的路径来加载页面,例如 file:///C:page/lala.pdf

希望对你有帮助。

【讨论】:

  • 是的,当您引用本地文件并包含完整路径时,即 C:...,您会收到“找不到文件”错误,并且可以检索 URL。不幸的是,文件中的链接只是相对的,因此不包括完整路径。因此,您会得到file:///page/lala.aspx?.....,其就绪状态为“未初始化”,URL 为“about:blank”。
【解决方案2】:

我发现的最简单的方法实际上来自另一个 StackOverflow 答案...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");
        }
    });
});

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 2013-12-31
    • 2016-10-03
    • 2014-08-17
    • 2021-03-02
    • 2022-11-08
    • 2021-09-09
    • 2019-11-17
    相关资源
    最近更新 更多