¿Por qué no puedo acceder a 'window' en una función exposeFunction () con Puppeteer?

Tengo un muy simpleTitiritero script que usaexposeFunction() ejecutar algo dentro de Chrome sin cabeza.

(async function(){

    var log = console.log.bind(console),
        puppeteer = require('puppeteer');


    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    var functionToInject = function(){
        return window.navigator.appName;
    }

    await page.exposeFunction('functionToInject', functionToInject);

    var data = await page.evaluate(async function(){
        console.log('woo I run inside a browser')
        return await functionToInject();
    });

    console.log(data);

    await browser.close();

})()

Esto falla con:

ReferenceError: window is not defined

Que se refiere a la función inyectada. ¿Cómo puedo acceder?window dentro del Chrome sin cabeza?

Se que puedo hacerevaluate() en cambio, pero esto no funciona con una función que paso dinámicamente:

(async function(){

    var log = console.log.bind(console),
        puppeteer = require('puppeteer');

    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    var data = await page.evaluate(async function(){
        console.log('woo I run inside a browser')
        return window.navigator.appName;
    });

    console.log(data);

    await browser.close();

})()

Respuestas a la pregunta(2)

Su respuesta a la pregunta