Как добавить правый клик Inspect Element в электронное приложение? (Так же, как в Google Chrome)

Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:

Вы пишете

lst = [[1] * 4] * 3

Это эквивалентно:

lst1 = [1]*4
lst = [lst1]*3

Это означает, что lst - это список с 3 элемента, указывающие на lst1. Это означает, что две следующие строки эквивалентны:

lst[0][0] = 5
lst1[0] = 5

Поскольку lst[0] - это только lst1.

Чтобы получить желаемое поведение, вы можете использовать понимание списка:

lst = [ [1]*4 for n in xrange(3) ]

В этом случае выражение переоценивается для каждого n, что приводит к другому списку.

1
задан Rajivrocks 24 March 2019 в 04:54
поделиться

1 ответ

Добавьте следующий код в код процесса отображения вашего окна . Обратите внимание, что вам, возможно, придется адаптировать первые две строки, в зависимости от того, какие элементы API уже определены ...

const { remote, webFrame } = require ('electron');
const { getCurrentWebContents, Menu, MenuItem } = remote;
//
let rightClickPosition;
//
const contextMenu = new Menu ();
const menuItem = new MenuItem
(
    {
        label: 'Inspect Element',
        click: () =>
        {
            let factor = webFrame.getZoomFactor ();
            let x = Math.round (rightClickPosition.x * factor);
            let y = Math.round (rightClickPosition.y * factor);
            getCurrentWebContents ().inspectElement (x, y);
        }
    }
);
contextMenu.append (menuItem);
//
window.addEventListener
(
    'contextmenu',
    (event) =>
    {
        event.preventDefault ();
        rightClickPosition = { x: event.x, y: event.y };
        contextMenu.popup ();
    },
    false
);

Ссылки:

Что касается того, как открыть devTools с помощью ярлыка, это произойдет автоматически, если строка меню содержит подменю с меню предмет, у которого role есть toggledevtools. Например, в вашем коде основного процесса добавление этого в шаблон меню обеспечит пункт меню Toggle Developer Tools со стандартным сочетанием клавиш:

{
    label: "Developer",
    submenu:
    [
        { role: 'reload' },
        { role: 'toggledevtools' }
    ]
}

Ссылка: Пункт меню Роли

ОБНОВЛЕНИЕ :

Похоже, существует более мощный и гибкий способ обработки контекстного меню на уровне webContents путем прослушивания 'context-menu' событие, задокументированное начиная с Электрон 1.0.2.

Одна важная особенность заключается в том, что коэффициент масштабирования больше не нужно принимать во внимание, координаты x и y, возвращаемые в params, просто всегда верны.

Ссылка: Событие webContents: 'context-menu'

Вот несколько альтернативных кодов процесса визуализации с использованием этого метода:

const { getCurrentWebContents, Menu, MenuItem } = require ('electron').remote;
//
let webContents = getCurrentWebContents ();
//
let rightClickPosition;
//
const contextMenu = new Menu ();
const menuItem = new MenuItem
(
    {
        label: 'Inspect Element',
        click: () =>
        {
            webContents.inspectElement (rightClickPosition.x, rightClickPosition.y);
        }
    }
);
contextMenu.append (menuItem);
//
webContents.on
(
    'context-menu',
    (event, params) =>
    {
        rightClickPosition = { x: params.x, y: params.y };
        contextMenu.popup ();
    }
);
0
ответ дан 24 March 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: