fix: create WebContents for webview on request (#13761)

This commit is contained in:
trop[bot] 2018-07-21 16:51:31 +09:00 committed by Cheng Zhao
parent f4ff97038c
commit 4333020157
5 changed files with 31 additions and 8 deletions

View file

@ -100,6 +100,9 @@ module.exports = {
ipcRenderer.send('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', params, requestId)
ipcRenderer.once(`ELECTRON_RESPONSE_${requestId}`, callback)
},
createGuestSync: function (params) {
return ipcRenderer.sendSync('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST_SYNC', params)
},
attachGuest: function (elementInstanceId, guestInstanceId, params) {
ipcRenderer.send('ELECTRON_GUEST_VIEW_MANAGER_ATTACH_GUEST', elementInstanceId, guestInstanceId, params)
webFrame.attachGuest(elementInstanceId)

View file

@ -230,7 +230,7 @@ class SrcAttribute extends WebViewAttribute {
}
parse () {
if (!this.webViewImpl.elementAttached || !this.webViewImpl.attributes[webViewConstants.ATTRIBUTE_PARTITION].validPartitionId) {
if (!this.webViewImpl.elementAttached || !this.webViewImpl.attributes[webViewConstants.ATTRIBUTE_PARTITION].validPartitionId || !this.getValue()) {
return
}
if (this.webViewImpl.guestInstanceId == null) {
@ -240,9 +240,6 @@ class SrcAttribute extends WebViewAttribute {
}
return
}
if (!this.getValue()) {
return
}
// Navigate to |this.src|.
const opts = {}

View file

@ -174,6 +174,10 @@ class WebViewImpl {
})
}
createGuestSync () {
this.attachGuestInstance(guestViewInternal.createGuestSync(this.buildParams()))
}
dispatchEvent (webViewEvent) {
this.webviewNode.dispatchEvent(webViewEvent)
}
@ -421,7 +425,11 @@ const registerWebViewElement = function () {
// WebContents associated with this webview.
proto.getWebContents = function () {
return v8Util.getHiddenValue(this, 'internal').webContents
const internal = v8Util.getHiddenValue(this, 'internal')
if (!internal.webContents) {
internal.createGuestSync()
}
return internal.webContents
}
window.WebView = webFrame.registerEmbedderCustomElement('webview', {