Отправить сообщение от процесса рендеринга процессу узла с помощью Nightmare

Как я могу отправить сообщение от процесса рендеринга (веб-страницы) основному процессу (узлу) в Nightmare? В Electron есть ipc, а Nightmare построен на top of Electron, поэтому я полагаю, что это возможно, но я не могу понять, как это сделать.

Что-то подобное:

http://example.com

<script type="text/javascript">
 window.postMessage('aaaaaaaa', '*');
</script>

index.js

let nightmare = new Nightmare();
nightmare.on('message', function(e) {
 console.log(e.data); // will output aaaaaaaa
});

nightmare.goto('http://example.com').then(function() {
 console.log('loaded');
});

person Mateusz Mazurek    schedule 18.03.2016    source источник
comment
Не могли бы вы рассказать подробнее о том, чем вы пытаетесь заниматься?   -  person Ross    schedule 19.03.2016
comment
@Ross Я хочу загрузить страницу, которая может отправлять сообщение процессу узла из javascript, и я не знаю, как должен выглядеть этот js.   -  person Mateusz Mazurek    schedule 21.03.2016
comment
Я должен был быть более конкретным: не могли бы вы предоставить образец кода, демонстрирующий то, что вы пытаетесь сделать?   -  person Ross    schedule 21.03.2016
comment
Я обновил свой вопрос, надеюсь, теперь он ясен.   -  person Mateusz Mazurek    schedule 23.03.2016
comment
Спасибо за обновление. Я попытаюсь ответить сейчас.   -  person Ross    schedule 23.03.2016


Ответы (1)


Если вы пытаетесь получить данные со страницы, почему бы не использовать .evaluate()? Что-то вроде:

nightmare.goto('http://example.com')
    .evaluate(function(){
        var element = document.querySelector('some-element.query');
        return element.value;
    })
    .then(function(value){
        console.log(value);
    });

В вашем исходном примере вы не можете отправлять произвольные события, пока в Nightmare не будут разрешены плагины до экземпляра Electron, который он обертывает. Было обсуждение добавления произвольных событий в ядро ​​Nightmare в # 354, которое я попробовал исправить в Nightmare # 367. Было определено, что добавление произвольных событий должно осуществляться с помощью подключаемого модуля под # 425. PR плагина не принят, но плагин для плагина уже готов.

person Ross    schedule 23.03.2016