1

I am building a distributed menu system to support the operations side of a large enterprise. The idea is that users can use this application to launch web applications (online or offline), virtualized apps residing on a remote server, as well as locally-installed, legacy thick client applications that we cannot afford to change (read: C/C++, Java-based.)

Some additional requirements:

  • Web-based deployment
  • Auto-update when application startup detects a new version on a server
  • Offline-enabled - the absence of network connectivity will not impede user operation of locally-installed thick clients or offline web applications
  • RESTful data synchronization (i.e., menu uses indirection to access tools/services by querying a secure rendezvous REST service
  • Cross-platform, cross-browser with minimal or no-client install required (e.g., doesn't require a JVM that continually bugs the user to update)
  • Intuitive UI, similar to Stacks in Mac OS X or menus that arc when selected

Server-side. For now, I've settled on ServiceStack as my RESTful web service framework, backed by a SQL Server Enterprise database. For now, the server-side is not a critical concern. Eventually, I'll need to consider securtiy, role authorization, etc., but for now I have a good handle on the server.

Client-side Candidate Solutions. The client is a different story. I've studied a wide-range of approaches to this problem, none of which are ideal (mainly due to browser sandbox security.) I'm looking for better alternatives to these:

  • Offline web application
    • Google Installable Web Apps
      • Supports the majority of my use-cases, but AFAIK it cannot execute locally installed native code
      • To mitigate this, I've looked into NaCl, but it places restrictions on the native code that's executed, and this is beyond my budget and control
    • HTML5 Offline Web Application
      • This would strongly be my preference, but is it possible to execute thick client code from this without the restrictions of NaCl above?
  • Browser extension
  • Browser plugin
  • Thick web service client
    • XUL-based
      • Of all my efforts, I've gone the farthest with XUL. I have a XUL-powered application that makes AJAX requests to my web service to dynamically populate the menu
      • This is working well so far, but has some issues:
    • Java Web Start
    • .NET-based using a Custom MIME type
      • Not sure how to get started with this, or where it will take me.
    • Appcelerator Titanium
      • May be a viable alternative. I haven't looked into it yet.

Kudos if you've made it this far! Basically, this application is replacing a legacy menu built with scripts, which requires an army to maintain and update. I'm sure there's some top-heavy SOA solution to this problem, but the budget won't support a massive investment in up front-design and long-term maintenance.

Please clue me in if there are alternatives to the candidates I've examined so far. What's the ideal solution to my problem, given the above requirements?

EDIT: I'm intrigued by this SharePoint Quick Launch Web Part. Does anyone have experience with this one, or know how to pull this off from SP?

Community
  • 1
  • 1
retrodrone
  • 5,850
  • 9
  • 39
  • 65

2 Answers2

1

It sounds to me like there are numerous possible approaches to implementing the feature set you describe, but you are stuck on how to execute native apps from a browser-based app in a cross-browser, cross-platform way.

I'm afraid the only way to achieve this is to develop a small add-on for each browser that you want to support. For Firefox it's very simple to do this since there is an XPCOM API (nsIProcess) for invoking new processes. In IE you could write an ActiveX that is implemented in C++ and granted the necessary privileges. In Chrome you have no choice but to write an NPAPI plugin.

If it were me, I'd write an NPAPI plugin for Firefox and Chrome since webpages can then use the same code for both browsers. For IE you can write an ActiveX which is accessed in more or less the same way as the plugin. So webpages that want the ability to launch external processes would embed the plugin, set the necessary property value (i.e. the path to the process to execute) and call a method on the embedded object.

Matthew Gertner
  • 4,487
  • 2
  • 32
  • 54
0

Based on the excellent tutorials provided, I'm attempting to build the distributed menu system using SiteFusion It's a PHP-based client/server framework for XUL applications, that consequently allows clients to execute local, native applications. Although the server is only supported on *NIX platforms, the client can run anywhere. This solution seems ideal for the majority of my stated requirements.

retrodrone
  • 5,850
  • 9
  • 39
  • 65