Как скачать документ и открыть файл в Webkit GTK View?

В настоящее время я запускаю HTML-файл в представлении WebKit GTK. Я установил эти настройки:

    let new_settings = new WebKit.WebSettings ();
    new_settings.enable_universal_access_from_file_uris = true;
    this._web_view.set_settings(new_settings);

думая, что они позволят мне загрузить файл на мой компьютер (это не совсем то, что я пытаюсь сделать, но я хотел проверить это). Это не сработало:/

Ответственный за html ниже:

<a href="resume/resume1.doc"><img class="shadow" src="images/design/1.jpg" alt="img01"></a>

Я пытаюсь автоматически открыть файл resume1.doc в офисе libre, когда пользователь нажимает на изображение. Я не слишком уверен, как это сделать с GTK/HTML

Спасибо!:)

2 ответа

Не ясно, обслуживается ли страница с сервера или загружается локально.

Я не делал этого с локальными файлами, но для страниц, обслуживаемых сервером, вы будете следить за решением о типе mime и указывать веб-пакету, что он должен загрузить тип mime для типов mime, которые он не может обработать (или даже для типов mime, которые он может обрабатывать, если вы хотите загрузить веб-страницу). Внизу вы предоставите имя файла и будете следить за ходом работы. Webkit сообщит вам, когда загрузка будет завершена. Сигналы, которые позволят вам сделать это

  • мим-тип политика решение запрошенное
  • скачать запрошенные
  • извещать:: статус

Для локальных файлов я не знаю, сработает ли вышеуказанный подход. Если это не так, поскольку вы управляете страницей, у вас могут быть атрибуты ссылки, которые могут указывать, что файл нужно открывать, а не перемещаться.

Если у вас есть путь к файлу в любом из подходов, вы можете использовать команду xdg-open или ее эквивалентную функциональность, чтобы открыть файл в приложении, которое может обрабатывать файлы.

У вас есть начало этого правильно. Вам просто нужно разобраться с mime-type и решить, как вы хотели бы открыть Libre Office. Вот пример для локальных файлов (URI - это путь к определенному документу на сервере, который вы хотите открыть локально):

this._web_view.connect('mime-type-policy-decision-requested',
        (function (webview, frame, request, mimetype, decision) {
            if (mimetype === 'application/msword' ||
                mimetype === 'application/vnd.oasis.opendocument.spreadsheet') {
                // Spawn a libreoffice process with this uri. Necessary because
                // we want to open the files as templates - the `-n` option
                // requires the user to save-as.
                GLib.spawn_async(null, /* cwd */
                                 ['libreoffice', '-n', request.get_uri()],
                                 null, /* inherit environment */
                                 GLib.SpawnFlags.DO_NOT_REAP_CHILD | GLib.SpawnFlags.SEARCH_PATH,
                                 null /* setup function */ );
                decision.ignore();
                return true;

            } else if (mimetype === 'application/pdf') {
                // if PDF, use the build in viewer (usually evince)
                Gtk.show_uri(null, request.get_uri(), 0);
                decision.ignore();
                return true;
            }
            // default handler
            return false;
    }).bind(this));
Другие вопросы по тегам