OpenFin

I am trying to run the openfin-cli tool but npm is giving me errors.

You are probably behind a proxy, you can get around this issue in two ways:
npm --https-proxy=http://company.proxy.com
Or:
npm config set strict-ssl false


Why are my JavaScript calls to the fin.desktop objects undefined?

With the way the injection of the adapter works, it is important to ensure that it is fully assembled before trying to use it. The main() event is our equivalent to something like DOMContentLoaded for the DOM but for our injected script. With earlier versions of the runtime you could (usually) get away with relying on your script load time (omitting the main event) to be enough because of when we injected, though the main event is and has been the safest way to ensure that its ready.

The OpenFin JS adapter is fully accessible and ready for use after fin.desktop.main returns.

fin.desktop.main(() => {

  /* Ready for use */

});

How do I change the default websocket’s port?

The default port for the web socket server is 9696. If you want to change it to a different port you will need to edit your configuration manifest file (usually app.json) and set the web socket port to the preferred port as follow:

{
  "websocket_port": 9797,
  "startup_app": {
    "name": "App1",
    "url": "http://linkToMyApp/index.html",
    "uuid": "App1",
    "applicationIcon": "http://linkToMyIcon/myIcon.ico"
  },
  "runtime": {
    "arguments": "",
    "version": "stable"
  }
}

Does OpenFin provide access to system level process and memory information?

Yes. OpenFin's system API allows you to query the same statistics as shown in the chrome task manager: http://cdn.openfin.co/jsdocs/stable/tutorial-system.getProcessList.html

A sample app using this API is available in our Demo page http://openfin.co/partners/


How do I debug my OpenFin Application?

Visit our Support and Debugging page for more details.


Where is the OpenFin directory located?

The following directories are used by the runtime and RVM:

  • %TEMP% - used by the installer to download the initial RVM
  • %LOCALAPPDATA%/OpenFin - the “OpenFin” directory - final install location

Where is the log files location for apps and OpenFin Runtime?

RVM

Directory: %localappdata\OpenFin\logs\

Files

  • General.log: Records all info related to RVM events: app launching, registry key settings, asset url, etc.
  • Verbose.log: Has the same info that general.log does, but with more details.
  • Network.log: Logs all the HTTP requests done by the RVM: Runtime download, latest RVM version check, etc.
  • Installer.log: When installing an OpenFin using an installer generated by the ClickOnce installer leverages the OpenFin Install Generator so it will generate the same installer.log file.

Runtime

Directory: %localappdata\OpenFin\cache\

Files
Debug.log: Logs information related to the Runtime and the application: app manifest, errors produced by the runtime or application, app events, etc. The level of information logged can be set to verbose by setting the flag --v=1 in the Runtime arguments.


How can I do browser automation in OpenFin?

The OpenFin runtime can be automated using Selenium Web Driver. However we have made some change to Chromedriver.exe so it can support OpenFin applications. This modified version is available in our Github repository. Please visit our Github Selenium repository for more information.


How can I take a screenshot using Java and Selenium?

In order to take screenshot, you will need to set the following Chrome option:

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("forceDevToolsScreenshot", Boolean.TRUE);

You can find an example here.


How can I disable the Dev Tools context menu?

You can disable the Dev Tools context Menu by setting it to false in the app.json configuration file.

{
  "startup_app": {
    "contextMenu": false
    ...
  }
}

What does OpenFin install on a desktop machine?

The installer installs everything to the default install dir:
%LOCALAPPDATA%/OpenFin

OpenFin RVM creates the following sub directories:

  • Apps/Assets - App resources are stored here.
  • Runtime - Runtime binaries and assets stored here.
  • Cache - Created by the runtime, browser cache is stored here (cookies, local storage etc.).
  • Logs - Installer and RVM logs stored here.

For more details, please visit our Installation page.


How do I install OpenFin in a custom location?

The OpenFin RVM and Runtime can be customized to be installed in a specific location on a user’s desktop by setting a registry key via Group Policy.

Note: The directory needs to have Read/Write access

To set your custom path, set a string value for installDir in:
HKEY_CURRENT_USER/Software/OpenFin/RVM or
HKEY_LOCAL_MACHINE/Software/OpenFin/RVM

By default, OpenFin installs in the following location:
%localappdata%/OpenFin

For more details, please visit our Installation page


How can I customize the OpenFin runtime download screen?

In RVM v0.1.0.25 or higher, app developers can custom brand the OpenFin Download screen. The Download Screen is displayed to desktop users when downloading a new version of the OpenFin Runtime. Visit the Runtime Version Manager page for more details.


Are there known install incompatibilities?

Yes. Although the OpenFin Runtime is designed to be installed on machines without admin rights, there are a few minor cases that we have encountered which prevent installation:

  • Symantec - Some older versions of Symantec Endpoint Security identify the Google Chromium security sandbox setup process as virus-like activity as it uses some undocumented parts of the Windows API’s. Running your application with ‘—no-sandbox' as a runtime argument gets around this issue in the short-term. The longer term solution requires the client to upgrade their security software.

  • Microsoft AppLocker - Blanket Application Control Policies can prevent OpenFin from running. This can be mitigated by having the client install an Executable rule that is Certificate Based on the Publisher as follows:

    • Publisher: “O=OPENFIN INC., L=NEW YORK, S=NY, C=US”
    • Product Name: “*”
    • File name: “*”
    • File version: “*”
  • Bit9 - Security software that does active endpoint monitoring. An exception needs to be made for OpenFin software to run consistently.

  • ZIP - If unzipping is blocked on the machine, this can cause the install to not work
    For more details, please visit our Installation page


Does OpenFin work in a Citrix environment?

Yes, OpenFin works in a Citrix environment.

We recommend that you override the default installation location and install OpenFin in the roaming profile. You'll also need to set the new installation path in the registry. You can do this by adding a string key value named “installDir” with the value reflecting the new installation path, in:

HKEY_CURRENT_USER/Software/OpenFin/RVM

Additionally, override the cache directory using Runtime arguments in your config:
-user-data-dir=[YOUR CACHE DIRECTORY]

The user must have full permission to the user-data-dir.

If the -user-data-dir is located on a network drive, then the security sandbox for the renderer process needs to be disabled by creating a string value named “runtimeArgs" with a value of “--no-sandbox”, in:

HKEY_CURRENT_USER/Software/OpenFin/RVM/runtimeArgs

If you have any issues with the display, then you may need to disable GPU by creating a string value named “runtimeArgs" with a value of --disable-gpu in:

HKEY_CURRENT_USER/Software/OpenFin/RVM/runtimeArg


What is the difference between Application.close() and Application.terminate()?

Application.close() closes the application and any child windows created by the application in a clean and structured way.

Application.terminate() does the same by terminating the process. The app will close immediately and any cleanup methods won’t be called.

Always use Application.close() to close the app. The only exception is when the app is not responding.


How do I set a system tray icon?

You can set a TrayIcon by using the setTrayIcon as follow:

var systemTrayIcon = "http://yoursite.com/icon.png";

//Create system tray icon
fin.desktop.Application.getCurrent().setTrayIcon(
  systemTrayIcon,
  event => console.log(event)
);

How do I clear OpenFin’s cache?

Cache can be deleted manually by removing files from these folders:

For Windows 7, 8 or 10: %LOCALAPPDATA%/OpenFin/cache
For Windows XP: C:/Documents and Settings/[MyName]/Local Settings/Application Data/OpenFin/cache


How can I launch a ClickOnce application?

The way you would launch a ClickOnce install is by doing the following in your application:

app = new fin.desktop.Application({ 
  "name": "clickOnceSample""url": "http://demoappdirectory.openf.in/desktop/config/apps/OpenFin/ClickOnceSample/ClickOnceSample.application""uuid": "clickOnceSample""autoShow": true"launchExternal": "clickOnce" 
});

app.run();

How do I use a repository for my app to save settings or files?

For settings based on KeyValue HTML5 comes with an integrated local storage, to learn how to use it please refer to: http://diveintohtml5.info/storage.html

HTML5 also supports working with files using the FileSystem API, for more information please refer to: http://www.html5rocks.com/en/tutorials/file/filesystem/


How does the off-screen behavior work?

The new off-screen window behavior is automatic.

If a monitor gets unplugged and it had windows on it those windows will automatically be moved to the “closest" on screen position.

This auto-move also happens on create of a window where the runtime had previously saved the position of the window (so if the monitor was removed when the application was not running and the application relies on OpenFin to position the window on open).

This behavior should not negatively interact with any code you would write based on the getMonitorInfo() getAllWindows() calls.


How can I have a window exceeding the OpenFin Window boundaries?

The way to achieve the described behavior would be to use a positioned frameless child window.


What do the numbers in the Runtime version mean?

X1.X2.X3.X4 or 9.61.36.35

  • X1 = OpenFin major version
  • X2 = Chromium version OpenFin version is built on
  • X3 = JS API version
  • X4 = Build version

How does OpenFin choose an authentication scheme when a serverproxy accepts multiple schemes?

When a server or proxy accepts multiple authentication schemes, OpenFin's network stack selects the authentication scheme with the highest score:

Basic: 1
Digest: 2
NTLM: 3
Negotiate: 4

The Basic scheme has the lowest score because it sends the username/password unencrypted to the server or proxy.

OpenFin chooses the most secure scheme, and ignores the server or proxy's preference, indicated by the order in which the schemes are listed in the WWW-Authenticate orProxy-Authenticate response headers. This could be a source of compatibility problems because MSDN documents that "WinInet chooses the first method it recognizes." (http://msdn.microsoft.com/en-us/library/aa384220%28VS.85%29.aspx)

Note: In IE7 or later, WinInet chooses the first non-Basic method it recognizes.


What are OpenFin’s default proxy settings?

By default, OpenFin will use the systems Proxy settings (the same settings used by Internet Explorer and Edge).

The Proxy setting OpenFin uses can be configured using Group Policy settings.


If I drop a file, is there a way to disable displaying it?

You can disable it with javascript:

window.addEventListener('dragover', e => e.preventDefault()); window.addEventListener('drop', e => e.preventDefault());

Why do some audio/video files not play in OpenFin?

Some of the audiovideo codecs are proprietary and require license to distribute.

There's a distinction between Chrome and Chromium in codec support as listed here (https://www.chromium.org/audio-video).

We recommend you convert your audio files to a supported format such as OGG or WebM.


When OpenFin is packaged to auto-update does the RVM, Runtime or both update?

If auto-updates are not disabled, this allows for auto updates of both the RVM and Runtime.

For the RVM, there is only one version of the RVM at any point - newer versions of the RVM package should overwrite the existing RVM. If an application updates the RVM version it is using or if a new application is deployed and it is a newer version of the RVM, this triggers an auto-update of the RVM.

For the Runtime, application providers indicate the specific version of the runtime that their application requires in the application’s configuration file (app.json). When auto-updates are allowed, the application provider can trigger an update by updating the app’s targeted version.


How often do OpenFin updates occur when auto-updates are enabled?

When auto-updates are enabled the application provider can trigger an update by updating the targeted version in the application configuration file. Each application has their own process for determining when to make upgrades.

OpenFin releases on average 3-4 new major versions of the Runtime and 7-8 new versions of the RVM each year. These estimates are subject to change as we are responsive to client requirements and timelines.


Who determines which OpenFin Runtime version is needed for packaging?

Application providers indicate which specific version of the runtime their application requires in their application’s configuration file.

In the event that multiple application providers are interested in packaging their apps on the same desktop, it is very likely that multiple OpenFin Runtime versions are needed. For the RVM, if the most recently installed application is using a newer RVM, this new RVM needs to be packaged in place of the older version.


If auto-updates of OpenFin are turned off, under what circumstances are updates to the RVM needed?

  • New applications utilizing a more recent RVM version
  • Existing applications utilizing recent RVM enhancements

Why does OpenFin not update any values in localStorage or sessionStorage, when a window is closed shortly after it is opened?

Its possible you need to set an argument in your app config, try adding:
--enable-aggressive-domstorage-flushing


What apps can run in OpenFin?

OpenFin Runtime supports HTML5, Flex/Flash or Silverlight applications. These applications can run as-is in OpenFin without any additional development.

OpenFin Runtime supports HTML5, Flex/Flash or Silverlight applications. These applications can run as-is in OpenFin without any additional development.


What operating systems (Windows/Mac/Linux) does OpenFin support?

OpenFin supports the following OS:

  • Windows XP
  • Windows 7
  • Windows 8
  • Windows 10

Developer-only support for Mac OSX and Linux (Debian x64 and ARMv7 - RaspberryPi):

Currently, OpenFin only has Mac/Linux support for developers. Although the feature gap between Mac/Linux and Windows should be minimal, the Mac/Linux versions of OpenFin are not intended for deployment to end-users. We do eventually plan to build an RVM for Mac. For now, developers can get OpenFin on a Mac/Linux by using our CLI Tools.


How is the OpenFin Runtime different from a web browser?

Web browsers are great for running websites and sophisticated web applications, but financial applications often need installed user experience. OpenFin Runtime enables web applications to have the same capabilities as an installed desktop application. Features of the OpenFin Runtime not available in web browsers include:

  • Native windows that can popup, tear out, and dock
  • Fully customizable push notifications
  • Inter-application Messaging Bus for app-to-app communication
  • Interoperability with .NET, C++, and Java applications
  • Advanced effects including chromeless windows, window transparency and rounded corners
  • Saving window state across multiple monitors

Does OpenFin provide an HTML5 framework?

No. OpenFin does not provide an HTML5 framework. OpenFin's Runtime and APIs are compatible with leading HTML5 frameworks such as AngularJS, Bootstrap, D3, jQuery, Sencha Ext JS and Backbone.


Does OpenFin host applications?

No. Applications can be hosted anywhere web applications are hosted including in the cloud or in private data centers.


How are applications updated?

Applications are updated using standard web deployment. Application code is updated centrally and users get the latest version the next time they run the application. OpenFin provides additional tools to enable phased deployment of an application to different sets of users.


How often does the runtime software need to be upgraded?

OpenFin recommends an upgrade of the runtime software every 18-24 months. Upgrades include the latest version of Chromium, as well as enhancements to OpenFin capabilities.

OpenFin is continuously enhancing the runtime, providing major upgrades 3-4 times a year. The rigorous development schedule enables the OpenFin engineering team to keep pace with the Chromium project.


How does OpenFin help with migration to HTML5?

OpenFin enables phased migration to HTML5. Existing Flash and Silverlight apps can run in the runtime alongside new HTML5 apps and OpenFin Runtime SDK can be embedded in existing Java, .NET and C++ applications. This enables firms to start building with HTML5 without having to do a rewrite of existing mission critical applications.


Does OpenFin provide equivalent software for mobile?

No. HTML5 desktop applications built for OpenFin can also be designed to run full-screen on iPads, iPhones, Android and Windows devices. These applications can be extended to provide native device functionality using native wrappers such as PhoneGap and Cordova.


Does OpenFin support multiple monitors?

Yes. Applications can run on multiple monitors and window positions. Window sizes and states are saved between login sessions. If a user switches the number monitors being used the runtime automatically adjusts window positions.


Does OpenFin support Single Sign-On (SSO)?

Yes. OpenFin supports single sign-on (SSO) by supporting standards including OAuth, LDAP, Security Assertion Markup Language (SAML) and Active Directory integrations.


Does the OpenFin Runtime need admin privileges to be installed?

No. The runtime is deployed via a zip file that contains the runtime executable and does not require admin user privileges. The OpenFin Runtime can also be deployed via an MSI, Java Web Start, or Microsoft ClickOnce.

For more details, please visit our Installation page.


How does OpenFin handle UI performance?

OpenFin is based on Chromium which includes Google’s high-performance:

  • V8 JavaScript engine and
  • Blink rendering engine to support real-time performance and rendering requirements of financial applications.

What is the memory footprint of an application running in the runtime?

Applications running in OpenFin run in their own process and the memory footprint is equivalent to running an application in the Google Chrome browser.

By design, OpenFin creates 3 process (low resource usage) to support the runtime features:

  • Desktop
  • Core
  • GPU

Additionally, each application creates 1 renderer process.

Applies to OpenFin Version 6.0


Does OpenFin support uninstall for an application?

Yes. Users can uninstall an app by finding an application's uninstall shortcut in the start menu (or call the RVM programmatically with specific parameters) which does the following:

  • Removes the specific app's Desktop and Start Menu Start/Uninstall shortcuts
  • Removes the company start menu folder if empty
  • Removes the app's install directory e.g. apps4283058201
  • If no apps are left after uninstalling an app, then removes all runtimes/folders including the install directory

Where are cookies stored within OpenFin?

Cookies are stored in Users\AppData\Local\OpenFin\cache\Cookies.

They are stored per Runtime version and security realm. The Runtime manages cookies, unless you change the cookie directly from an Adapter (.NET, Java, Air) by sending 'set-cookie' or 'clear-cache'.


Does OpenFin support the ability to display PDF files out of the box?

No. As of Chromium 45, Chromium no longer supports the NPAPI Plug which made this feature available to OpenFin.

OpenFin suggests the following approaches to satisfy a PDF requirement:

Leverage standard web approach for downloading files and then have your application launch or save them.
Leverage a HTML5 PDF viewer like pdf-js to integrate into your application.
Leverage the launchExternalProcess API call to open Adobe Reader to display your pdf file.


Can an OpenFin application be started from a URL / protocol handler in a web browser?

Yes. Once there is an OpenFin Application configured on a given machine, other OpenFin Applications can be launched using a custom protocol handler (fin:// and fins://). Further details on custom protocol handlers can be found in our Deployment Options.


Does OpenFin provide any specific support for securely caching data, i.e. at rest?

No. Standard web storage APIs are available and one can use the web crypto to encrypt content.


Does an OpenFin application run entirely on the desktop? Are there any calls to external services?

Yes. The only external calls are for new runtime downloads, RVM downloads, any app assets and licensing.


Can I host my own Runtime assets?

Yes. Further details on hosting your own assets can be found in our Hosting Assets documentation.


Is there a restriction on the size of an individual application?

No. There are no restrictions on the size of an application. OpenFin renders the webpage via chromium, so this requirement would scale to the degree which a standard web application could. There is a memory limit of 1GB per process on our 32-bit version and roughly 2GB per process on our 64-bit version (similar to Chrome). Customers have scaled beyond this limit by spinning up new processes or offloading to service workers.


Is there any dependency on browsers being installed on the desktop?

No. OpenFin has no dependencies. The Runtime is an independent package and does not require any browsers, libraries etc to be present on the machine. The Chromium instance is included in the Runtime. Depending on the OpenFin Version (i.e. Version 6 based on Chrome 49) you use, we recommend downloading the vanilla Chrome version (Chrome 49) from our Versions page. This can be useful when needing to determine whether your code is behaving the same in Chrome as it is in OpenFin for their respective versions.


How do I close the OpenFin Runtime entirely?

Simply call the fin.desktop.System.exit() method.


What are some common application launch errors?

Failed to read the file. JSON error at line: 1, column: 1, reason: not a value

  • This error indicates that the URL\File being used is not a valid JSON file. If possible load the in a standard browser and check the site is operational and returning standard JSON. It is possible that the site has the MIME type for the file is being treated as an octet-stream. On a standard browser, instead of displaying the JSON, it will try to dowload a file, this is not supported by the RVM. The Application provider will need to amend the MIME type.

Last Error =

  • The code returned in a Last Error = is returned by Windows. The code reason can be looked up here: Windows Error Codes

The HTTP request to download the runtime failed, please verify the assets URL is valid:

  • This error indicates that the RVM was unable to download the runtime specified in the application configuration file. Check the network.log for further information:

The operation timed out
Thu, 10 May 2018 14:08:27:931 [7924:4160] ERROR- Failed on HttpSendRequest()
Thu, 10 May 2018 14:08:27:931 [7924:4160] ERROR- Error Code: 12002
Thu, 10 May 2018 14:08:27:931 [7924:4160] ERROR- Error Text: The operation timed out

  • This could indicate the download took too long to complete.

Does OpenFin support TypeDefinitions?

OpenFin Type Definitions are available via NPM: npm install @types/openfin. Because our api is not actually native TypeScript, you can use the definitions in conjunction with the global fin object.


How do I pass custom data?

Where Deep Linking is not the solution, Custom Data should fill the gap. In the App Config, the "startup_app" property accepts a "customData" property. The String data set in this property can then be retrieved using window.getOptions, see here.


How do I retain local storage when upgrading?

Persistent Local Information Storage
You can accomplish persistent local information storage using LocalStorage. If there will be a lot of data you need to store locally then I also recommend taking a look at IndexedDB. Both options should work out of the box with OpenFin.

  • LocalStorage
  • IndexedDB

Retain Local Storage Data on Upgrade

Data stored in the Local Storage will be lost upon any OpenFin Runtime Version upgrade. Starting with RVM 3.8+ this is no longer the case. With RVM 3.8+ Local Storage, including Window positions, will be carried over to a new runtime version.


Does OpenFin support Chrome features?

Google offer a number of features via the Google API. Many of these features are standard in Chrome, but not in Chromium, and are therefore not available in OpenFin 'out of the box'. It's a common misconception that OpenFin supports these features because Chrome does.

Google hosts its information about the Google API's here.


How do I add/remove context menu items?

Customizing Context Menu Items
There is currently not a way to add or remove the Context Menu items directly. However you may disable the Context Menu altogether by setting the following value in the application configuration file: "contextMenu": false

Note the above is also available for use as a Window Option for child windows.

In order to have a custom context menu, a custom solution will need to be created to capture and handle the right click event.

Further information on this setting and others for the application configuration can be found here.

Known Issues
Context Menu not displayed: Chromium has a strange behavior with the context menu and alt key. If you bring up the context menu and proceed to hit the alt key it will dismiss the menu. We tested this behavior with vanilla Chromium as well as OpenFin and saw the same result.


How many http requests can I make?

Due to how Chromium is designed, only six (6) concurrent http requests can be done per domain. This would affect any type of request. The limit is not configurable in OpenFin. The only way to work around this would be to host resources across various domains.


How do I handle a message received by an EmbeddedView?

If they have done the POST on their .NET side they can use the InterApplication Bus. The embedded view will subscribe to a topic and the .NET side will send the contents of the POST to that topic.
They can do an AJAX POST from their embedded view and do what they need to do with that response.

Check out the WPF demo in our Github repository.


How do I check the state of a window?

Code taken from ZD 4994 You can check if a window is minimized (or maximized, normal) with following code:

it('Check window state', function (done) { executeAsyncJavascript("var callback = arguments[arguments.length - 1];" + "fin.desktop.Window.getCurrent().getState(function(data) { callback(data); } );").then(function(data ) { console.log('window state', data); if (data === 'minimized) { console.log('the window is minimized'); } done(); }); });

Why does my main app window stay open after I quit the app?

This could be due to creating a main app that does not show, then from this application launching a cross-origin child window. This child window will then have it's own render process. When closing the app you would then see the original main app still open. This can be fixed using something like this:

 var applicationOptions = new ApplicationOptions(
  name: _config.Name,
  uuid: Guid.NewGuid().ToString(),
  url: null)
  {
    MainWindowOptions = new WindowOptions("Main")
    {
        URL = url, 
        CustomData = nee
        {
           appId = Name,
           appDisplayName = DisplayName
        }
    });
  };

// This Initialize overload Embeds the main window, and doesn't create a child window
_openFinView.EmbeddedView.Initialize(
    OpenFinGlobals.RuntimeOptions,
    applicationOptions);

How do I enable API v2?

API v2 is available as an experimental feature. To enable it add the following to the application configuration file:

"experimental": {

"v2Api": true

}

How do I enable Flash in OpenFin?

In order to enable Flash in an OpenFin you would need to add "plugins": true to the window options of the application.

In the app config it could look something like this:

{
    "startup_app": {
        "name": "AppName",
        "url": "http://localhost:8080/index.html",
        "uuid": "AppUuid",
        "applicationIcon": "http://localhost:8080/favicon.ico",
        "autoShow": true,
        "saveWindowState": true,
        "plugins": true
    },
    "runtime": {
        "arguments": "--v=1",
        "version": "stable"
    }
}

How do I enable Flash in the .NET API?

runtime.Connect(() =>
{
    var appOptions = new ApplicationOptions(appName, appUUID, appUrl)
    {
      BrowserPluginsEnabled = true
    };

    var app = runtime.CreateApplication(appOptions);
});

What are some common issues with authentication?

If you have assets sitting behind basic authentication, you must use OpenFin Runtime version 5.44.8.35 and above. Anything below this version will not display the appropriate Chrome authentication forms and will return http 401 errors.

If the application configuration file is behind basic authentication you will receive an additional authentication form generated by the OS. This will look different than the Chrome authentication form. This is generated by the RVM/Runtime and not Chrome.


How do I update an icon image?

To update the Icon Image the icon property file name (In the application configuration file) must be updated. If a client updates the image, but not the file name then the icon for existing installations will not be updated.

If the Company name is not set (or removed), then an icon refresh will fail (even if a new icon url/file name is configured).


How do I access offline browsing?

It is possible handle offline browsing in OpenFin by using service workers. We have an Mozilla Service Worker Cookbook to implement offline browsing.


How do I customize a window?

http://cdn.openfin.co/jsdocs/stable/fin.desktop.Window.html#~options

Electron handles frame and frameless windows slightly differently depending on the OS in use. In windows 7, these windows will be the same size. In windows 10 framed windows will be smaller in both width and height. Width will be about 15 pixels smaller while height will be 30-60 pixels smaller. Electron does this to preserve legacy window operations.


How do I change a window's title?

Changing the name of an application in the taskbar can achieved by using document.title. You can set the title programmatically like so: document.title = "New Title";


How do I bring a window to the top of a window stack?

Using the window.bringToFront() method will only bring a window to the top of OpenFin window stack only while the alwaysOnTop method will bring the window on top of all windows, including external applications.

The alwaysOnTop method can be a bit ambiguous to implement for the purpose of quickly focusing a window. To assist I have created a quick code snippet as a guideline:

var mWindow = fin.desktop.Window.getCurrent();

        mWindow.updateOptions({
            alwaysOnTop: true
        }, function(e){
        	//Sets alwaysOnTop to false via success callback
            mWindow.updateOptions({
                alwaysOnTop: false
            });
        });

How do I close concurrent running OpenFin applications?

If we need to close an application that we do not have a reference to we can achieve this by first getting the UUIDs of all running applications and then using wrap to create a reference to it.

JavaScript Adapter

fin.desktop.System.getAllApplications(applicationInfoList => {
    applicationInfoList.forEach(app => {
      fin.desktop.Application.wrap(app.uuid).terminate();
    });
  });

.NET Adapter

Openfin.Desktop.DesktopSystem.getAllApplications((ack)=>{
    var apps = ack.getData(); //or retrieve all apps data

    Array.ForEach(apps, app => {
        var uuid = app.uuid //or get app uuid
        var wrappedApp = Openfin.Desktop.Runtime.WrapApplication(uuid);
        wrappedApp.terminate();
    });
})

How do I use a C# adapter in lieu of a C++ adapter?

//JS code
fin.desktop.InterApplicationBus.subscribe("*", "native-response", message => {
    // response received  
    console.log(message);
}, () => {
    // listening for response
    fin.desktop.InterApplicationBus.publish("native-call", "");
});
//C# code
[DllImport("Advapi32.dll")]
static extern bool GetUserName(StringBuilder lpBuffer, ref int nSize);

InterApplicationBus.Subscription(runtime, "native-call").MessageReceived += (s, e) =>
{
    int nSize = 64;
    StringBuilder username = new StringBuilder(nSize);
    GetUserName(username, ref nSize);
    InterApplicationBus.Send(e.Source, "native-response", username.ToString());
};

The JS code will listen on the "native-response" topic for responses, once it receives a response it would send a message over to the C# side on the "native-call" topic where you would invoke your native dll call.


Does OpenFin support scaling?

Yes, but due to limitations in chromium, OpenFin only supports scaling in increments of 100%.

If you have additional questions, contact support@openfin.co.


Can I make a transparent window in OpenFin?

Official Support for Web Content Transparency and Alpha Mask

Starting in version 8.56.26.* windows transparency is possible in OpenFin with a couple of methods. However they are considered experimental both from the Chromium project's perspective and from an OpenFin perspective due to potential differences in hardware affecting both. The only truly supported way of doing overflow at the moment is by grouping multiple windows.

As Chrome adds full fledged support for transparency we will be flowing it into OpenFin.

More information on the limitations of the transparent feature can be found on Electron's page here.

AlphaMask

You can make a window transparent in version 8.56.26.*+ by using the "alphaMask" window option. This is not as straightforward as you would expect, so here is the breakdown. When setting the alphaMask you must specify RGB values:

"alphaMask":{
    "red": 200,
    "green": 200,
    "blue": 200
}

What the alphaMask actually does is turn anything of matching RGB value transparent. If you set a background to match:

background-color: rgb(200,200,200)

You will end up with a transparent background, with DOM elements on top still visible.

Caveats:

  • User cannot click-through transparent regions (you can't in Electron either)
  • Won't make visual sense on Pixel-pushed environments such as Citrix
  • Aero must be enabled
  • GPU must be disabled
  • Not supported on rounded corner windows
  • Not supported on Mac
  • runtime key --disable-gpu is required.

Note: Unclear behavior on remote Desktop support. Chromium actually had this feature but took it away since it was buggy and had performance implications.

Web Content Transparency

Set transparent to true and --disable-legacy-window in your app's config:

"startup_app": {
    ...
    "transparent": true
    ...
},
"runtime": {
    "arguments": "--disable-legacy-window",
    "version": "stable"
}, ...

With this method you can set the RGBA opacity of an element to 0 and this will result in a non-clickthrough transparent region.

Caveats:

  • Windows Vista and greater
  • User can not click-through transparent regions
  • Will not make visual sense on Pixel-pushed environments such as Citrix
  • Aero must be enabled
  • GPU must be enabled

FAQ


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.