Открыть папку в Finder/ Explorer с веб-страницы?

Если у меня есть путь к файловой системе, могу ли я открыть окно в Проводнике (в окнах) или в Finder (в OS X), отображающее папку, к которой ведет путь?

Cookie-баллы за ответы, которые являются кроссплатформенными и / или без плагинов.

3 ответа

Решение

Вы должны иметь возможность запускать новый процесс из браузера. Есть несколько способов сделать это. Я покажу способ JNLP сделать это.

Создайте файл jnlp следующим образом:

    <?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://example/" href="jnlpTest.jnlp">
    <information>
        <title>Some Title</title>
        <vendor>Some Vendor</vendor>
        <homepage href="http://example/" />
        <description>Some Description</description>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.6+" />
        <jar href="jnlpTest.jar" />
    </resources>
    <application-desc main-class="MainClass" />
</jnlp>

Создайте jnlpTest.jar из следующего:

public class MainClass {
    public static void main(String args[]) {
        Runtime rt = Runtime.getRuntime();
        try {
            //TODO - different exec for Mac
            rt.exec("explorer.exe");
        } catch (IOException e) {
            //exception
        }

    }
}

С манифестом:

Manifest-Version: 1.0
Main-Class: MainClass

Подпишите свою банку JNLP:

keytool -genkey -keystore testKeys -alias jdc
jarsigner -keystore testKeys jnlpTest.jar jdc

поместите файлы jar и jnlp на веб-сервер. Убедитесь, что MIME JNLP application/x-java-jnlp-file,

Ссылка для создания JNLP: http://java.dzone.com/articles/java-web-start-jnlp-hello

Теперь, когда пользователь нажимает на вашу ссылку jnlp, он загружает jar-файл и спрашивает, можно ли его запустить. Запуск его приведет к открытию окна проводника. Я знаю, что это не лучшее решение, но любое решение потребует разрешения пользователей на выполнение кода на их компьютере.

Для пользователей node-webkit ( NW.js) вы можете использовать...

var gui = require("nw.gui");

document.querySelector("[data-location]").onclick = function() {
  gui.Shell.showItemInFolder(__dirname + '/content/project/' + this.textContent);
};

Вероятно, вам нужно зарегистрировать в ОС свой собственный протокол, который будет обрабатывать такие ссылки, какmycustomapp://path=/mypath&extra=42а затем позвольте ссылке делегата браузера щелкнуть ссылку на ваше приложение, что затем вызовет соответствующее действие в зависимости от ОС, то есть для MacOS, которые вы запуститеopen -R /mypathпоказать в Finder, для запуска Windowsexplorer.exe /e,/mypathа для android/ios запускают соответствующие действия намерения.

Именно такой подход используют, например, Zoom, Webex, Telegram, Reddit и другие приложения.

MacOS

Для Macos вам понадобится что-то вроде этого в вашемInfo.plistфайл:

      <key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>CFBundleURLName</key>
        <string>com.myapp.content</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>mycustomapp</string>
            <string>mycustomapp_v2</string>
            <string>mycustomapp_v3</string>
        </array>
    </dict>
</array>

Окна

В Windows вам нужно будет добавить в реестр новый обработчик .

Андроид и iOS

Для Android и iOS см.:

Другие вопросы по тегам