Как скачать документ и открыть файл в 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));