fix: do not wait on promise returned by remote APIs (#18990)
* fix: make <webview>.loadURL async * docs: webview.loadURL returns Promise
This commit is contained in:
parent
015e1348e0
commit
faa2710485
4 changed files with 21 additions and 2 deletions
|
@ -277,6 +277,11 @@ webview.addEventListener('dom-ready', () => {
|
||||||
* `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadBlob[]](structures/upload-blob.md)) (optional)
|
* `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadBlob[]](structures/upload-blob.md)) (optional)
|
||||||
* `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files.
|
* `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files.
|
||||||
|
|
||||||
|
Returns `Promise<void>` - The promise will resolve when the page has finished loading
|
||||||
|
(see [`did-finish-load`](webview-tag.md#event-did-finish-load)), and rejects
|
||||||
|
if the page fails to load (see
|
||||||
|
[`did-fail-load`](webview-tag.md#event-did-fail-load)).
|
||||||
|
|
||||||
Loads the `url` in the webview, the `url` must contain the protocol prefix,
|
Loads the `url` in the webview, the `url` must contain the protocol prefix,
|
||||||
e.g. the `http://` or `file://`.
|
e.g. the `http://` or `file://`.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// Public-facing API methods.
|
// Public-facing API methods.
|
||||||
exports.syncMethods = new Set([
|
exports.syncMethods = new Set([
|
||||||
'getURL',
|
'getURL',
|
||||||
'loadURL',
|
|
||||||
'getTitle',
|
'getTitle',
|
||||||
'isLoading',
|
'isLoading',
|
||||||
'isLoadingMainFrame',
|
'isLoadingMainFrame',
|
||||||
|
@ -54,6 +53,7 @@ exports.syncMethods = new Set([
|
||||||
])
|
])
|
||||||
|
|
||||||
exports.asyncMethods = new Set([
|
exports.asyncMethods = new Set([
|
||||||
|
'loadURL',
|
||||||
'capturePage',
|
'capturePage',
|
||||||
'executeJavaScript',
|
'executeJavaScript',
|
||||||
'insertCSS',
|
'insertCSS',
|
||||||
|
|
|
@ -196,7 +196,7 @@ class SrcAttribute extends WebViewAttribute {
|
||||||
const method = 'loadURL'
|
const method = 'loadURL'
|
||||||
const args = [this.getValue(), opts]
|
const args = [this.getValue(), opts]
|
||||||
|
|
||||||
ipcRendererUtils.invokeSync('ELECTRON_GUEST_VIEW_MANAGER_CALL', guestInstanceId, method, args)
|
ipcRendererUtils.invoke('ELECTRON_GUEST_VIEW_MANAGER_CALL', guestInstanceId, method, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,20 @@ describe('<webview> tag', function () {
|
||||||
expect(webview.src).to.equal('')
|
expect(webview.src).to.equal('')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('does not wait until loadURL is resolved', async () => {
|
||||||
|
await loadWebView(webview, { src: 'about:blank' })
|
||||||
|
|
||||||
|
const before = Date.now()
|
||||||
|
webview.src = 'https://github.com'
|
||||||
|
const now = Date.now()
|
||||||
|
|
||||||
|
// Setting src is essentially sending a sync IPC message, which should
|
||||||
|
// not exceed more than a few ms.
|
||||||
|
//
|
||||||
|
// This is for testing #18638.
|
||||||
|
expect(now - before).to.be.below(100)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('nodeintegration attribute', () => {
|
describe('nodeintegration attribute', () => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue