代码之家  ›  专栏  ›  技术社区  ›  Instance Hunter

使用桌面用户界面浏览器

  •  10
  • Instance Hunter  · 技术社区  · 16 年前

    如何将浏览器用作桌面应用程序的用户界面?到目前为止我想出的方法是…

    1. 使用所有HTML/javascript。问题:无法访问文件系统或其他任何东西。
    2. 当应用程序正在使用时运行本地Web服务器。问题:当用户完成后,我如何杀死它?我的用户没有足够的技术来控制+C。
    3. 在常规图形用户界面中嵌入浏览器组件。问题:嵌入式浏览器组件最多只能是小故障。对javascript/css的支持从来没有真正的浏览器那么好。
    4. …?

    理想的解决方案适用于任何技术。我知道有写火狐扩展之类的选项,但是我想在后端技术和浏览器独立性方面拥有完全的自由。

    6 回复  |  直到 15 年前
        1
  •  2
  •   SLaks    16 年前

    在Windows中,您可以嵌入IE ActiveX控件,该控件使用与IE相同的呈现引擎(这是一个加减),您可以设置 ScriptObject 在宿主代码中的属性,并在javascript中以 window.external 做Javascript做不到的事情。

    如果你运行一个本地的web服务器,你可以在应用程序中有一个退出链接来杀死web。

        2
  •  9
  •   SLaks    16 年前

    请注意,如果选择运行本地Web服务器,则会造成安全风险。

    在同一台机器上运行的任何知道你的应用程序的网页都可以使用javascript向你的服务器发送请求,而你没有简单可靠的方法来知道请求的来源。(不要相信 referer 页眉)

    使用类似方法的Google桌面有几个现实世界中的漏洞,允许任何网页读取磁盘上的任何文件。

    有几种方法可以防止这种情况发生;我建议要求每个请求都有一个auth密钥,该密钥在每台计算机上随机生成(在某个时间到期),您可以将其放入实际页面的源代码中。XHR保护可以防止恶意网站读取身份验证密钥,从而使它们无法工作。

        3
  •  4
  •   Martin    16 年前

    如果您正在寻找一个带有kill链接的python web服务器,您可以随时检查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")
    

    此代码基于Cherrypy网站上的singleclickandrun示例: http://tools.cherrypy.org/wiki/SingleClickAndRun

    注意,与普通的webapp相比,您可能会使用模板引擎并从类似main的方法加载模板。

    最好的方法是在GUI窗口中嵌入浏览器控件,并在应用程序退出时关闭服务器。

    为了安全起见,您可以添加一个身份验证方案。有一些是由Cherrypy支持的,但是您也可以使用工具模块实现自己的。

        4
  •  4
  •   Brad Hutchins    15 年前

    我希望做同样的事情(桌面应用程序使用最新的HTML5/CSS3浏览器作为桌面应用程序的GUI),只使用Ruby(我决定使用Ruby的各种原因)。令人惊讶的是,人们已经想出了许多跨平台的图书馆。但是,很少有人甚至没有人在尝试将Web浏览器变成桌面应用程序用户界面方面做过任何工作。跨平台问题…好吧,我不会说解决了,但我会说朝着正确的方向迈出了几步。

    对我来说,这将是完美的新HTML5/CSS3标准出台。我知道可以通过本地运行的Web服务器来完成。

    另一种方式可能是来自北方280号的人如何做他们所做的。他们开发了Objective-J(一个模仿Objective-C如何扩展常规C的常规JavaScript扩展)和Cappuccino(Objective-J相当于Objective-C_s Cocoa框架在Mac上工作)。他们还从Xcode开发了Apple_S__Interface Builder__的280 North_版本的__Atlas_,用于构建Internet应用程序的Objective-J和Cappuccino框架。Atlas实际上是一个卡布奇诺网络应用程序,作为桌面应用程序运行在桌面上。在这种情况下,他们使用narwhal__一个跨平台、通用的JavaScript平台来开发浏览器之外的JS应用程序(基本上是一个专门的Web服务器)。

    如果有人能想出一个主意让__浏览器,直接连接到桌面应用程序__工作,而不需要一个共同存在的Web服务器,仍然能够操作本地的fs,我将非常感兴趣_hmmm…现在我想起来了,我想知道新的谷歌Chrome项目__原生客户机_157;是否可以用来实现这一点。Nacl和ActiveX非常相似,除了你不局限于Windows平台(但至少目前仅限于Google Chrome浏览器)。只有通过沙盒增加了安全性,但您可以操作本地fs_浼,我越想越怀疑可以这样做。

    有什么想法吗?

        5
  •  1
  •   Robert Love    16 年前

    你没有提到你需要瞄准的操作系统。但您可以创建一个程序statared web服务器,然后启动默认浏览器。等待浏览器被用户终止,然后关闭Web服务器。

    例如,在Windows上,可以使用CreateProcess()来生成进程 然后,msgwaitformultipleobjects()等待它完成执行。

        6
  •  1
  •   Bas    16 年前

    HTML应用程序(简称HTA)已经存在一段时间了。你可以阅读所有关于它们的信息 here .它们基本上是HTML和JavaScript,具有创建窗口和访问本地文件系统的额外选项。它们似乎正是你想要的。这是微软的技术,所以这只适用于Windows系统上的IE。我已经成功地将它用作CD-ROM的前端,用于向一年级学生分发软件。

    另一种选择是使用AdobeAir。我对这项技术并不完全熟悉,但它似乎提供了一个框架,可以将网页部署为桌面应用程序。我不能作为客人发布第二个链接,但只要谷歌它,你就会很快找到它。