Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to write an FireFox extension to open local drive folder from FireFox in windows os?

In my web page I have a file link to the local drive folder. Such as:

<a href="D:\folder\file.txt">file.txt</a> 
<a href="D:\folder>folder</a>

In normal ways, it isn't possible to open folder from web browser. So, I thought I can do it from a Firefox extension, because I am using Firefox in my job.

like image 294
qinHaiXiang Avatar asked Dec 03 '25 18:12

qinHaiXiang


1 Answers

To open folder you can use function:

function openDir(val)
{
    if (val == "")
    {
        alert("Directory not defined");
        return;
    }
    if(navigator.userAgent.indexOf("Firefox") == -1)
    {
        alert("Currently active folder links supported only for Mozilla Firefox web browser");
        return;
    }
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    var localFile = 
        Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);

    var env =
        Components.classes["@mozilla.org/process/environment;1"]
        .createInstance(Components.interfaces.nsIEnvironment);

    var systemRoot = env.get("SystemRoot");
    if (systemRoot == "")
    {
        alert("Unable to retrieve SystemRoot environment variable");
    }

    localFile.initWithPath(systemRoot + "\\explorer.exe");
    var process =
        Components.classes["@mozilla.org/process/util;1"]
        .createInstance(Components.interfaces.nsIProcess);
    process.init(localFile);
    process.run(false, Array(val), 1);
}

The file read method is shown in nhnb answer, the write method looks like:

// Returns null if it can't do it, false if there's an error, true if it saved OK
function mozillaSaveFile(filePath,content)
{
    if(window.Components) {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
            file.initWithPath(filePath);
            if(!file.exists())
                file.create(0,0664);
            var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
            out.init(file,0x20|0x02,00004,null);
            out.write(content,content.length);
            out.flush();
            out.close();
            return true;
        } catch(ex) {
            return false;
        }
    }
    return null;
}
like image 113
rmflow Avatar answered Dec 05 '25 08:12

rmflow



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!