electron/spec/ts-smoke/electron/renderer.ts
2019-05-03 13:53:45 -07:00

266 lines
6.7 KiB
TypeScript

import {
ipcRenderer,
remote,
webFrame,
clipboard,
crashReporter,
screen,
shell
} from 'electron'
import * as fs from 'fs'
// In renderer process (web page).
// https://github.com/atom/electron/blob/master/docs/api/ipc-renderer.md
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"
ipcRenderer.on('asynchronous-reply', (event, arg: any) => {
console.log(arg) // prints "pong"
event.sender.send('another-message', 'Hello World!')
})
ipcRenderer.send('asynchronous-message', 'ping')
// remote
// https://github.com/atom/electron/blob/master/docs/api/remote.md
const BrowserWindow = remote.BrowserWindow
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
remote.getCurrentWindow().on('close', () => {
// blabla...
})
remote.getCurrentWindow().capturePage().then(buf => {
fs.writeFile('/tmp/screenshot.png', buf, err => {
console.log(err)
})
})
remote.getCurrentWebContents().print()
remote.getCurrentWindow().capturePage().then(buf => {
remote.require('fs').writeFile('/tmp/screenshot.png', buf, (err: Error) => {
console.log(err)
})
})
// web-frame
// https://github.com/atom/electron/blob/master/docs/api/web-frame.md
webFrame.setZoomFactor(2)
console.log(webFrame.getZoomFactor())
webFrame.setZoomLevel(200)
console.log(webFrame.getZoomLevel())
webFrame.setVisualZoomLevelLimits(50, 200)
webFrame.setLayoutZoomLevelLimits(50, 200)
webFrame.setSpellCheckProvider('en-US', {
spellCheck (words, callback) {
setTimeout(() => {
const spellchecker = require('spellchecker')
const misspelled = words.filter(x => spellchecker.isMisspelled(x))
callback(misspelled)
}, 0)
}
})
webFrame.insertText('text')
webFrame.executeJavaScript('return true;').then((v: boolean) => console.log(v))
webFrame.executeJavaScript('return true;', true).then((v: boolean) => console.log(v))
webFrame.executeJavaScript('return true;', true)
webFrame.executeJavaScript('return true;', true).then((result: boolean) => console.log(result))
console.log(webFrame.getResourceUsage())
webFrame.clearCache()
// clipboard
// https://github.com/atom/electron/blob/master/docs/api/clipboard.md
clipboard.writeText('Example String')
clipboard.writeText('Example String', 'selection')
console.log(clipboard.readText('selection'))
console.log(clipboard.availableFormats())
clipboard.clear()
clipboard.write({
html: '<html></html>',
text: 'Hello World!',
bookmark: 'Bookmark name',
image: clipboard.readImage()
})
// crash-reporter
// https://github.com/atom/electron/blob/master/docs/api/crash-reporter.md
crashReporter.start({
productName: 'YourName',
companyName: 'YourCompany',
submitURL: 'https://your-domain.com/url-to-submit',
uploadToServer: true
})
// desktopCapturer
// https://github.com/atom/electron/blob/master/docs/api/desktop-capturer.md
const desktopCapturer = require('electron').desktopCapturer
desktopCapturer.getSources({ types: ['window', 'screen'] }).then(sources => {
for (let i = 0; i < sources.length; ++i) {
if (sources[i].name == 'Electron') {
(navigator as any).webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sources[i].id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
}, gotStream, getUserMediaError)
return
}
}
})
function gotStream (stream: any) {
(document.querySelector('video') as HTMLVideoElement).src = URL.createObjectURL(stream)
}
function getUserMediaError (error: Error) {
console.log('getUserMediaError', error)
}
// File object
// https://github.com/atom/electron/blob/master/docs/api/file-object.md
/*
<div id="holder">
Drag your file here
</div>
*/
const holder = document.getElementById('holder')
holder.ondragover = function () {
return false
}
holder.ondragleave = holder.ondragend = function () {
return false
}
holder.ondrop = function (e) {
e.preventDefault()
const file = e.dataTransfer.files[0]
console.log('File you dragged here is', file.path)
return false
}
// nativeImage
// https://github.com/atom/electron/blob/master/docs/api/native-image.md
const Tray = remote.Tray
const appIcon2 = new Tray('/Users/somebody/images/icon.png')
const window2 = new BrowserWindow({ icon: '/Users/somebody/images/window.png' })
const image = clipboard.readImage()
const appIcon3 = new Tray(image)
const appIcon4 = new Tray('/Users/somebody/images/icon.png')
// https://github.com/electron/electron/blob/master/docs/api/process.md
// preload.js
const _setImmediate = setImmediate
const _clearImmediate = clearImmediate
process.once('loaded', function () {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
// screen
// https://github.com/atom/electron/blob/master/docs/api/screen.md
const app = remote.app
let mainWindow: Electron.BrowserWindow = null
app.on('ready', () => {
const size = screen.getPrimaryDisplay().workAreaSize
mainWindow = new BrowserWindow({ width: size.width, height: size.height })
})
app.on('ready', () => {
const displays = screen.getAllDisplays()
let externalDisplay: any = null
for (const i in displays) {
if (displays[i].bounds.x > 0 || displays[i].bounds.y > 0) {
externalDisplay = displays[i]
break
}
}
if (externalDisplay) {
mainWindow = new BrowserWindow({
x: externalDisplay.bounds.x + 50,
y: externalDisplay.bounds.y + 50
})
}
})
// shell
// https://github.com/atom/electron/blob/master/docs/api/shell.md
shell.openExternal('https://github.com').then(() => {})
// <webview>
// https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md
const webview = document.createElement('webview')
webview.loadURL('https://github.com')
webview.addEventListener('console-message', function (e) {
console.log('Guest page logged a message:', e.message)
})
webview.addEventListener('found-in-page', function (e) {
if (e.result.finalUpdate) {
webview.stopFindInPage('keepSelection')
}
})
const requestId = webview.findInPage('test')
webview.addEventListener('new-window', async e => {
const { shell } = require('electron')
await shell.openExternal(e.url)
})
webview.addEventListener('close', function () {
webview.src = 'about:blank'
})
// In embedder page.
webview.addEventListener('ipc-message', function (event) {
console.log(event.channel) // Prints "pong"
})
webview.send('ping')
webview.capturePage().then(image => { console.log(image) })
{
const opened: boolean = webview.isDevToolsOpened()
const focused: boolean = webview.isDevToolsFocused()
const focused2: boolean = webview.getWebContents().isFocused()
}
// In guest page.
ipcRenderer.on('ping', function () {
ipcRenderer.sendToHost('pong')
})