| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- import { ipcRenderer, webFrame } from 'electron';
- import AutoComplete from './models/auto-complete';
- import { getTheme } from '~/utils/themes';
- import { ERROR_PROTOCOL, WEBUI_BASE_URL } from '~/constants/files';
- import { injectChromeWebstoreInstallButton } from './chrome-webstore';
- const tabId = ipcRenderer.sendSync('get-webcontents-id');
- export const windowId: number = ipcRenderer.sendSync('get-window-id');
- const goBack = () => {
- ipcRenderer.invoke(`web-contents-call`, {
- webContentsId: tabId,
- method: 'goBack',
- });
- };
- const goForward = () => {
- ipcRenderer.invoke(`web-contents-call`, {
- webContentsId: tabId,
- method: 'goForward',
- });
- };
- window.addEventListener('mouseup', (e) => {
- if (e.button === 3) {
- e.preventDefault();
- goBack();
- } else if (e.button === 4) {
- e.preventDefault();
- goForward();
- }
- });
- let beginningScrollLeft: number = null;
- let beginningScrollRight: number = null;
- let horizontalMouseMove = 0;
- let verticalMouseMove = 0;
- const resetCounters = () => {
- beginningScrollLeft = null;
- beginningScrollRight = null;
- horizontalMouseMove = 0;
- verticalMouseMove = 0;
- };
- function getScrollStartPoint(x: number, y: number) {
- let left = 0;
- let right = 0;
- let n = document.elementFromPoint(x, y);
- while (n) {
- if (n.scrollLeft !== undefined) {
- left = Math.max(left, n.scrollLeft);
- right = Math.max(right, n.scrollWidth - n.clientWidth - n.scrollLeft);
- }
- n = n.parentElement;
- }
- return { left, right };
- }
- document.addEventListener('wheel', (e) => {
- verticalMouseMove += e.deltaY;
- horizontalMouseMove += e.deltaX;
- if (beginningScrollLeft === null || beginningScrollRight === null) {
- const result = getScrollStartPoint(e.deltaX, e.deltaY);
- beginningScrollLeft = result.left;
- beginningScrollRight = result.right;
- }
- });
- ipcRenderer.on('scroll-touch-end', () => {
- if (
- horizontalMouseMove - beginningScrollRight > 150 &&
- Math.abs(horizontalMouseMove / verticalMouseMove) > 2.5
- ) {
- if (beginningScrollRight < 10) {
- goForward();
- }
- }
- if (
- horizontalMouseMove + beginningScrollLeft < -150 &&
- Math.abs(horizontalMouseMove / verticalMouseMove) > 2.5
- ) {
- if (beginningScrollLeft < 10) {
- goBack();
- }
- }
- resetCounters();
- });
- if (process.env.ENABLE_AUTOFILL) {
- window.addEventListener('load', AutoComplete.loadForms);
- window.addEventListener('mousedown', AutoComplete.onWindowMouseDown);
- }
- const postMsg = (data: any, res: any) => {
- window.postMessage(
- {
- id: data.id,
- result: res,
- type: 'result',
- },
- '*',
- );
- };
- const hostname = window.location.href.substr(WEBUI_BASE_URL.length);
- if (
- process.env.ENABLE_EXTENSIONS &&
- window.location.host === 'chrome.google.com'
- ) {
- injectChromeWebstoreInstallButton();
- }
- const settings = ipcRenderer.sendSync('get-settings-sync');
- if (
- window.location.href.startsWith(WEBUI_BASE_URL) ||
- window.location.protocol === `${ERROR_PROTOCOL}:`
- ) {
- (async function () {
- const w = await webFrame.executeJavaScript('window');
- w.settings = settings;
- w.require = (id: string) => {
- if (id === 'electron') {
- return { ipcRenderer };
- }
- return undefined;
- };
- if (window.location.pathname.startsWith('//network-error')) {
- w.theme = getTheme(w.settings.theme);
- w.errorURL = await ipcRenderer.invoke(`get-error-url-${tabId}`);
- } else if (hostname.startsWith('history')) {
- w.getHistory = async () => {
- return await ipcRenderer.invoke(`history-get`);
- };
- w.removeHistory = (ids: string[]) => {
- ipcRenderer.send(`history-remove`, ids);
- };
- } else if (hostname.startsWith('newtab')) {
- w.getTopSites = async (count: number) => {
- return await ipcRenderer.invoke(`topsites-get`, count);
- };
- }
- })();
- } else {
- (async function () {
- if (settings.doNotTrack) {
- const w = await webFrame.executeJavaScript('window');
- Object.defineProperty(w.navigator, 'doNotTrack', { value: 1 });
- }
- })();
- }
- if (window.location.href.startsWith(WEBUI_BASE_URL)) {
- window.addEventListener('DOMContentLoaded', () => {
- if (hostname.startsWith('settings')) document.title = '设置';
- else if (hostname.startsWith('history')) document.title = '历史记录';
- else if (hostname.startsWith('bookmarks')) document.title = '管理书签';
- else if (hostname.startsWith('extensions')) document.title = '扩展';
- else if (hostname.startsWith('newtab')) {
- document.title = '新建标签页';
- }
- });
- window.addEventListener('message', async ({ data }) => {
- if (data.type === 'storage') {
- const res = await ipcRenderer.invoke(`storage-${data.operation}`, {
- scope: data.scope,
- ...data.data,
- });
- postMsg(data, res);
- } else if (data.type === 'credentials-get-password') {
- const res = await ipcRenderer.invoke(
- 'credentials-get-password',
- data.data,
- );
- postMsg(data, res);
- } else if (data.type === 'save-settings') {
- ipcRenderer.send('save-settings', { settings: data.data });
- }
- });
- ipcRenderer.on('update-settings', async (e, data) => {
- const w = await webFrame.executeJavaScript('window');
- if (w.updateSettings) {
- w.updateSettings(data);
- }
- });
- ipcRenderer.on('credentials-insert', (e, data) => {
- window.postMessage(
- {
- type: 'credentials-insert',
- data,
- },
- '*',
- );
- });
- ipcRenderer.on('credentials-update', (e, data) => {
- window.postMessage(
- {
- type: 'credentials-update',
- data,
- },
- '*',
- );
- });
- ipcRenderer.on('credentials-remove', (e, data) => {
- window.postMessage(
- {
- type: 'credentials-remove',
- data,
- },
- '*',
- );
- });
- }
|