New on OpenNTF: Plugin to close XPiNC applications from CSJS code / to detect Notes ID changes
Karsten Lehmann 9 September 2013 22:06:28
There is a new project on OpenNTF that I created a few days ago: Mindoo Xulrunner Prefs.js Management Plugin.It's nothing big, only a small Eclipse plugin that can be installed in the Notes Client to manage the preferences of the Xulrunner engine that renders XPages in the Notes Client (XPiNC).
The main purpose for this is to set the property "
dom.allow_scripts_to_close_windows
" to false
on a number of machines (the plugin can be deployed via policy). This enables XPages applications to close their own tab in client-side JavaScript (CSJS), something that is not possible by default yet (last tested version: Notes Client R9). But the even more interesting part, at least for Eclipse plugin developers, is that the project demonstrates how to run code before and after the password prompt of IBM Notes.
We use the following Extension Point:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="com.ibm.rcp.lifecycle.application.startBundles">
<application
id="com.ibm.rcp.personality.framework.RCPApplication">
<bundle
id="com.mindoo.xpinc.changeprefs">
</bundle>
</application>
</extension>
</plugin>
The plugin code will actually get started a bit too early for our specific use case, because the user still has to enter his password, so no Notes session is available yet to read the Notes.ini content (or even find out where the Notes.ini is located).
So we register an ILoginContextEventListener to get notified as soon as the user has logged in:
public void start(BundleContext bundleContext) throws Exception {
XPiNCChangePrefsActivator.context = bundleContext;
//we register a ILoginContextEventListener to get notified when the
//user has logged into the platform
ILoginContextService service = SecurePlatform.getLoginContext();
service.addListener(new ILoginContextEventListener() {
boolean hasTweakedPrefs = false;
public void handleLogin(LoginContextEvent event) {
if (event.type == LoginContextEvent.MethodEnd && !event.hasException) {
synchronized (XPiNCChangePrefsActivator.class) {
if (!hasTweakedPrefs) {
//we use a flag here, because the
//method is called twice
XPiNCPrefs.tweakXulrunnerPrefs();
hasTweakedPrefs=true;
}
}
}
}
public void handleLogout(LoginContextEvent event) { }
});
}
This technique can also be used to detect Notes ID changes and is inspired by a blog article of Hunter Medney.
Please note that there is another Extension Point in the Eclipse platform to launch code on startup, which is called after the user has logged in:
<extension point="org.eclipse.ui.startup">
<startup class="com.mindoo.startuptest.MyStartupHandler" />
</extension>
But the Extension Point we used for the plugin seems to be called a bit earlier, which reduces the risk that any sidebar panel or open tab that uses Xulrunner is opened before, which would prevent us from changing the prefs.js content permanently.
- Comments [0]