Использование браузера для настольного интерфейса - PullRequest
10 голосов
/ 29 октября 2009

Как я могу использовать браузер в качестве пользовательского интерфейса для настольного приложения? Пути, которые я придумала до сих пор ...

  1. Использовать весь HTML / Javascript. Проблема: Не удается получить доступ к файловой системе или к чему-либо еще.
  2. Запустите локальный веб-сервер во время использования приложения. Проблема: как убить его, когда пользователь закончил? Мои пользователи не достаточно технически, чтобы Ctrl + C.
  3. Вставить компонент браузера в обычный графический интерфейс. Проблема: встроенные компоненты браузера в лучшем случае имеют сбои. Поддержка Javascript / CSS никогда не бывает так хороша, как в реальном браузере.
  4. ...

Идеальное решение будет работать с любой технологией. Я знаю, что есть варианты, такие как написание расширений Firefox, но я хочу иметь полную свободу в бэкэнд-технологии и независимости браузера.

Ответы [ 6 ]

9 голосов
/ 29 октября 2009

Обратите внимание, что если вы решите запустить локальный веб-сервер, вы создаете угрозу безопасности.

Любая веб-страница, работающая на том же компьютере, которая знает о вашем приложении, может отправлять запросы на ваш сервер с помощью Javascript, и у вас нет простого и надежного способа узнать, откуда поступил запрос. (Не верьте заголовку referer)

В Google Desktop, который использует аналогичный подход, было несколько реальных уязвимостей, которые позволяют любой веб-странице читать любой файл на диске.

Есть несколько способов защиты от этого; Я бы порекомендовал требовать, чтобы у каждого запроса был ключ авторизации, который генерируется случайным образом для каждой машины (и срок его действия истекает в какой-то момент), который вы можете поместить в исходный код для реальных страниц. Защита XHR не позволит вредоносным веб-сайтам прочитать ключ авторизации, что сделает их бессильными.

4 голосов
/ 21 июля 2010

Я собираюсь сделать то же самое (настольное приложение, которое использует современный браузер HTML5 / CSS3 в качестве графического интерфейса настольного приложения), только с Ruby (различные причины, по которым я решил работать с Ruby).Это удивительное количество кроссплатформенных библиотек, которые придумали люди.Но, тем не менее, мало кто еще не проделал какую-либо работу, пытаясь сделать веб-браузер интерфейсом для настольных приложений.Кроссплатформенный вопрос ... ну, я не скажу, что он решен, но я скажу несколько шагов в правильном направлении.

Для меня это было бы прекрасно с появлением новых стандартов HTML5 / CSS3.Я знаю, что это можно сделать с помощью локального веб-сервера.

Другим способом может быть то, как ребята из «280 North» делают то, что делают.Они разработали Objective-J (расширение обычного JavaScript, имитирующего, как Objective-C расширяет обычный C) и Cappuccino (Objective-J, эквивалентный работе фрейма Objective-C Какао на MAC).Они также разработали «Atlas», который является версией 280 «North Builder» для Apple «Interface Builder» от Xcode, для своих сред Objective-J и Cappuccino для создания интернет-приложений.Atlas - это веб-приложение Cappuccino, работающее на вашем рабочем столе в качестве настольного приложения.В этом случае они используют Narwhal… кроссплатформенную универсальную платформу JavaScript для разработки JS-приложений вне браузера (в основном, специализированный веб-сервер).

Если кто-либо может предложить идею сделать«Браузер, прямое подключение к настольному приложению» работает без необходимости сосуществования веб-сервера и все еще может манипулировать локальной FS, я был бы очень заинтересован… Хммм… Теперь, когда я думаю об этом, мне интересно,для этого можно использовать новый проект Google Chrome «Native Client».NaCL во многом похож на Active X, за исключением того, что вы не ограничены платформой Windows (но ограничитесь браузером Google Chrome, по крайней мере, на данный момент).Только там есть дополнительная безопасность через песочницу, но вы можете манипулировать локальной FS… Чем больше я думаю об этом, тем больше начинаю подозревать, что это можно сделать.

Есть мысли?

4 голосов
/ 30 октября 2009

Если вы ищете веб-сервер python со ссылкой Kill, вы всегда можете проверить CherryPy.

import webbrowser
import cherrypy
import threading

class MyApp:
    """ Sample request handler class. """

    @cherrypy.expose
    def index(self):
        return """<html><head><title>An example application</title></head>
<body>
<h1>This is my sample application</h1>
Put the content here...
<hr>
<a href="/exit">Quit</a>
</body></html>"""

    @cherrypy.expose
    def exit(self):
        raise SystemExit(0)


class MyBGThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        cherrypy.tree.mount(MyApp())
        cherrypy.quickstart()

myThread = MyBGThread()
webbrowser.open("http://127.0.0.1:8080")

Этот код основан на примере из SingleClickAndRun на веб-сайте cherrypy: http://tools.cherrypy.org/wiki/SingleClickAndRun

Обратите внимание, что в обычном WebApp вы, вероятно, будете использовать шаблонизатор и загружать шаблоны из таких методов, как main.

Что-то, что было бы неплохо, - это вставить элемент управления браузера в окно графического интерфейса и закрыть сервер при выходе из приложения.

В целях безопасности вы можете добавить схему аутентификации. Некоторые из них поддерживаются cherrypy, но вы, возможно, могли бы реализовать и свой собственный, используя инструментальные модули.

2 голосов
/ 29 октября 2009

В Windows вы можете встроить элемент управления ActiveX IE, который использует тот же механизм рендеринга, что и IE. (Это плюс и минус). Вы можете установить свойство ScriptObject в своем коде хоста и получить к нему доступ в Javascript как window.external, чтобы делать то, что Javascript не может делать.

Если вы запускаете локальный веб-сервер, в приложении может быть ссылка для выхода, которая убивает веб-сервер.

1 голос
/ 29 октября 2009

HTML-приложения (HTA, для краткости) существуют уже некоторое время. Вы можете прочитать все о них здесь . В основном это HTML и Javascript с некоторыми дополнительными опциями для создания окна и с доступом к локальной файловой системе. Кажется, они именно то, что вы хотите. Это технология Microsoft, поэтому она будет работать только с IE в системах Windows. Я успешно использовал это в качестве внешнего интерфейса для CD-ROM, который использовался для распространения программного обеспечения среди студентов первого курса

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

1 голос
/ 29 октября 2009

Вы не упомянули ОС, на которую вам нужно ориентироваться. Но вы можете создать веб-сервер с программой, запустившей программу, а затем запустить браузер по умолчанию. Подождите, пока пользователь не прекратит работу с браузером, а затем выключите веб-сервер.

Так, например, в Windows вы можете использовать CreateProcess () для запуска процесса затем MsgWaitForMultipleObjects (), чтобы дождаться завершения выполнения.

...