Search code examples
javascriptunouno-automation-bridge

Singletons and the Automation bridge


The type com.sun.star.frame.Desktop is deprecated, and it is recommended to use the com.sun.star.frame.theDesktop singleton instead.

Other language bindings support access to a singleton. In Java, this thread says the following works:

com.sun.star.frame.theDesktop.get(componentContext)

However, the com.sun.star.frame namespace isn't available under the Automation bridge; there is only the single entry point of the service manager:

var objServiceManager = new ActiveXObject('com.sun.star.ServiceManager');

How can I acces this (and other) singletons?

(Originally posted on ask.libreoffice)


Solution

  • Singletons are accessed using the getByName method on the script context, passing in a string path to the singleton:

    '/singletons/com.sun.star.frame.theDesktop'
    

    The Automation bridge exposes the script context at the DefaultContext property on the service manager:

    var serviceManager = new ActiveXObject('com.sun.star.ServiceManager');
    var desktop = serviceManager.defaultContext.getByName('/singletons/com.sun.star.frame.theDesktop');
    

    (I was led to the solution by this post where the author is trying to automate OpenOffice using Delphi.)