From f88e36910a994521bbf0228e92feea562114e391 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Sun, 9 Sep 2018 22:08:11 +0200 Subject: [PATCH] feat: add options to webContents.loadFile --- docs/api/browser-window.md | 6 +++++- docs/api/web-contents.md | 6 +++++- lib/browser/api/browser-window.js | 4 ++-- lib/browser/api/web-contents.js | 9 +++++++-- spec/api-browser-window-spec.js | 20 ++++++++------------ spec/api-net-spec.js | 1 + spec/static/main.js | 7 ++----- 7 files changed, 30 insertions(+), 23 deletions(-) diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index c20c7480d7c14..3c7f42a86a143 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -1221,9 +1221,13 @@ win.loadURL('http://localhost:8000/post', { }) ``` -#### `win.loadFile(filePath)` +#### `win.loadFile(filePath[, options])` * `filePath` String +* `options` Object (optional) + * `query` Object (optional) - Passed to `url.format()`. + * `search` String (optional) - Passed to `url.format()`. + * `hash` String (optional) - Passed to `url.format()`. Same as `webContents.loadFile`, `filePath` should be a path to an HTML file relative to the root of your application. See the `webContents` docs diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 8990fe2e97ab6..abde45cd4a73f 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -647,9 +647,13 @@ const options = {extraHeaders: 'pragma: no-cache\n'} webContents.loadURL('https://github.com', options) ``` -#### `contents.loadFile(filePath)` +#### `contents.loadFile(filePath[, options])` * `filePath` String +* `options` Object (optional) + * `query` Object (optional) - Passed to `url.format()`. + * `search` String (optional) - Passed to `url.format()`. + * `hash` String (optional) - Passed to `url.format()`. Loads the given file in the window, `filePath` should be a path to an HTML file relative to the root of your application. For instance diff --git a/lib/browser/api/browser-window.js b/lib/browser/api/browser-window.js index cb523496d65c7..bb199fa8277dd 100644 --- a/lib/browser/api/browser-window.js +++ b/lib/browser/api/browser-window.js @@ -182,8 +182,8 @@ Object.assign(BrowserWindow.prototype, { getURL (...args) { return this.webContents.getURL() }, - loadFile (filePath) { - return this.webContents.loadFile(filePath) + loadFile (...args) { + return this.webContents.loadFile(...args) }, reload (...args) { return this.webContents.reload(...args) diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 8f5bd037b14d0..095aa1fb3174c 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -243,14 +243,19 @@ WebContents.prototype.getZoomLevel = function (callback) { }) } -WebContents.prototype.loadFile = function (filePath) { +WebContents.prototype.loadFile = function (filePath, options = {}) { if (typeof filePath !== 'string') { throw new Error('Must pass filePath as a string') } + const {query, search, hash} = options + return this.loadURL(url.format({ protocol: 'file', slashes: true, - pathname: path.resolve(app.getAppPath(), filePath) + pathname: path.resolve(app.getAppPath(), filePath), + query, + search, + hash })) } diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 00d49dd78750a..0b579fd8d9726 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -1441,10 +1441,8 @@ describe('BrowserWindow module', () => { } }) ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload) - let htmlPath = path.join(fixtures, 'api', 'sandbox.html?window-open-external') - const pageUrl = 'file://' + htmlPath let popupWindow - w.loadURL(pageUrl) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'window-open-external'}) w.webContents.once('new-window', (e, url, frameName, disposition, options) => { assert.equal(url, 'http://www.google.com/#q=electron') assert.equal(options.width, 505) @@ -1518,8 +1516,6 @@ describe('BrowserWindow module', () => { }) ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload) - let htmlPath = path.join(fixtures, 'api', 'sandbox.html?verify-ipc-sender') - const pageUrl = 'file://' + htmlPath let childWc w.webContents.once('new-window', (e, url, frameName, disposition, options) => { childWc = options.webContents @@ -1538,7 +1534,7 @@ describe('BrowserWindow module', () => { 'parent-answer', 'child-answer' ], done) - w.loadURL(pageUrl) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'verify-ipc-sender'}) }) describe('event handling', () => { @@ -1546,7 +1542,7 @@ describe('BrowserWindow module', () => { waitForEvents(w, [ 'page-title-updated' ], done) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?window-events')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'window-events'}) }) it('works for stop events', (done) => { @@ -1555,7 +1551,7 @@ describe('BrowserWindow module', () => { 'did-fail-load', 'did-stop-loading' ], done) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?webcontents-stop')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'webcontents-stop'}) }) it('works for web contents events', (done) => { @@ -1569,7 +1565,7 @@ describe('BrowserWindow module', () => { 'did-frame-finish-load', 'dom-ready' ], done) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?webcontents-events')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'webcontents-events'}) }) }) @@ -1640,7 +1636,7 @@ describe('BrowserWindow module', () => { sandbox: true } }) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?allocate-memory')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'allocate-memory'}) ipcMain.once('answer', function (event, {bytesBeforeOpen, bytesAfterOpen, bytesAfterClose}) { const memoryIncreaseByOpen = bytesAfterOpen - bytesBeforeOpen const memoryDecreaseByClose = bytesAfterOpen - bytesAfterClose @@ -1663,7 +1659,7 @@ describe('BrowserWindow module', () => { sandbox: true } }) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?reload-remote')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'reload-remote'}) ipcMain.on('get-remote-module-path', (event) => { event.returnValue = path.join(fixtures, 'module', 'hello.js') @@ -1698,7 +1694,7 @@ describe('BrowserWindow module', () => { }) ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload) - w.loadURL('file://' + path.join(fixtures, 'api', 'sandbox.html?reload-remote-child')) + w.loadFile(path.join(fixtures, 'api', 'sandbox.html'), {search: 'reload-remote-child'}) ipcMain.on('get-remote-module-path', (event) => { event.returnValue = path.join(fixtures, 'module', 'hello-child.js') diff --git a/spec/api-net-spec.js b/spec/api-net-spec.js index 2beacb67c25cc..bb3685c7ef342 100644 --- a/spec/api-net-spec.js +++ b/spec/api-net-spec.js @@ -1445,6 +1445,7 @@ describe('net module', () => { ipcRenderer.send('eval', ` const {net} = require('electron') const http = require('http') + const url = require('url') const netRequest = net.request('${server.url}${netRequestUrl}') netRequest.on('response', function (netResponse) { const serverUrl = url.parse('${server.url}') diff --git a/spec/static/main.js b/spec/static/main.js index b0728bbb67b95..326f0da5cbf01 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -8,7 +8,6 @@ const {Coverage} = require('electabul') const fs = require('fs') const path = require('path') -const url = require('url') const util = require('util') const v8 = require('v8') @@ -139,14 +138,12 @@ app.on('ready', function () { backgroundThrottling: false } }) - window.loadURL(url.format({ - pathname: path.join(__dirname, '/index.html'), - protocol: 'file', + window.loadFile('static/index.html', { query: { grep: argv.grep, invert: argv.invert ? 'true' : '' } - })) + }) window.on('unresponsive', function () { var chosen = dialog.showMessageBox(window, { type: 'warning',