Sets a custom window handler. Only works if experimental child windows are enabled for the view. Takes a match pattern or array of match patterns for which to call the handler. If multiple handlers are set that match a url, only the first set one will be called. This can be used to "cascade" listeners. Returns a function to unsubscribe this handler.
Example
Creates a view and logs requested window options into the console
let view;
async function createView() {
const me = await fin.Window.getCurrent();
return fin.View.create({
name: 'viewNameCustomWindow1',
target: me.identity,
bounds: {top: 10, left: 10, width: 600, height: 400},
experimental: {
childWindows: true
}
});
}
async function createViewWithCustomHandler1() {
view = await createView();
console.log('View created.');
const unsubscribe = await view.setCustomWindowHandler('<all_urls>', opts => {
console.log(`View requested to open ${opts.url}`);
})
await view.navigate('https://javascript.info/popup-windows');
console.log('View navigated to given url.');
}
createViewWithCustomHandler1()
.then(() => console.log('View created'))
.catch(err => console.log(err));
Example
Creates a view which will only block urls matching the google domain.
let view;
async function createView() {
const me = await fin.Window.getCurrent();
return fin.View.create({
name: 'viewNameCustomWindow2',
target: me.identity,
bounds: {top: 10, left: 10, width: 600, height: 400},
experimental: {
childWindows: true
}
});
}
async function createViewWithCustomHandler2() {
view = await createView();
console.log('View created.');
const unsubscribe = await view.setCustomWindowHandler('*://*.google.com/*', opts => {
console.log(`View requested to open google ${opts.url}`);
})
await view.navigate('https://javascript.info/popup-windows');
console.log('View navigated to given url.');
}
createViewWithCustomHandler2()
.then(() => console.log('View created'))
.catch(err => console.log(err));
Example
Creates a view which will only block all urls except those matching the google domain. Those will be opened in a new window.
let view;
async function createView() {
const me = await fin.Window.getCurrent();
return fin.View.create({
name: 'viewNameCustomWindow3',
target: me.identity,
bounds: {top: 10, left: 10, width: 600, height: 400},
experimental: {
childWindows: true
}
});
}
async function createViewWithCustomHandler3() {
view = await createView();
console.log('View created.');
const unsubscribe1 = await view.setCustomWindowHandler('*://*.google.com/*', opts => {
fin.Window.create(opts);
})
const unsubscribe2 = await view.setCustomWindowHandler('<all_urls>', opts => {
console.log(`View requested to open ${opts.url}`);
})
await view.navigate('https://javascript.info/popup-windows');
console.log('View navigated to given url.');
}
createViewWithCustomHandler3()
.then(() => console.log('View created'))
.catch(err => console.log(err));