Forward will/did navigate events to extensions
This commit is contained in:
parent
567622c126
commit
65abaee299
3 changed files with 52 additions and 11 deletions
|
@ -97,17 +97,42 @@ const removeBackgroundPages = function (manifest) {
|
|||
delete backgroundPages[manifest.extensionId]
|
||||
}
|
||||
|
||||
// Dispatch tabs events.
|
||||
const hookWebContentsForTabEvents = function (webContents) {
|
||||
const tabId = webContents.id
|
||||
const sendToBackgroundPages = function (...args) {
|
||||
for (const page of objectValues(backgroundPages)) {
|
||||
page.webContents.sendToAll('CHROME_TABS_ONCREATED', tabId)
|
||||
page.webContents.sendToAll(...args)
|
||||
}
|
||||
}
|
||||
|
||||
// Dispatch web contents events to Chrome APIs
|
||||
const hookWebContentsEvents = function (webContents) {
|
||||
const tabId = webContents.id
|
||||
|
||||
sendToBackgroundPages('CHROME_TABS_ONCREATED')
|
||||
|
||||
webContents.on('will-navigate', (event, url) => {
|
||||
sendToBackgroundPages('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', {
|
||||
frameId: 0,
|
||||
parentFrameId: -1,
|
||||
processId: webContents.getId(),
|
||||
tabId: tabId,
|
||||
timeStamp: Date.now(),
|
||||
url: url
|
||||
})
|
||||
})
|
||||
|
||||
webContents.on('did-navigate', (event, url) => {
|
||||
sendToBackgroundPages('CHROME_WEBNAVIGATION_ONCOMPLETED', {
|
||||
frameId: 0,
|
||||
parentFrameId: -1,
|
||||
processId: webContents.getId(),
|
||||
tabId: tabId,
|
||||
timeStamp: Date.now(),
|
||||
url: url
|
||||
})
|
||||
})
|
||||
|
||||
webContents.once('destroyed', () => {
|
||||
for (const page of objectValues(backgroundPages)) {
|
||||
page.webContents.sendToAll('CHROME_TABS_ONREMOVED', tabId)
|
||||
}
|
||||
sendToBackgroundPages('CHROME_TABS_ONREMOVED', tabId)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -245,7 +270,7 @@ const loadDevToolsExtensions = function (win, manifests) {
|
|||
app.on('web-contents-created', function (event, webContents) {
|
||||
if (!isWindowOrWebView(webContents)) return
|
||||
|
||||
hookWebContentsForTabEvents(webContents)
|
||||
hookWebContentsEvents(webContents)
|
||||
webContents.on('devtools-opened', function () {
|
||||
loadDevToolsExtensions(webContents, objectValues(manifestMap))
|
||||
})
|
||||
|
|
|
@ -174,5 +174,5 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
|||
}
|
||||
|
||||
chrome.i18n = require('./extensions/i18n').setup(extensionId)
|
||||
chrome.webNavigation = require('./extensions/web-navigation')
|
||||
chrome.webNavigation = require('./extensions/web-navigation').setup()
|
||||
}
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
const Event = require('./event')
|
||||
const {ipcRenderer} = require('electron')
|
||||
|
||||
exports.onBeforeNavigate = new Event()
|
||||
class WebNavigation {
|
||||
constructor () {
|
||||
this.onBeforeNavigate = new Event()
|
||||
this.onCompleted = new Event()
|
||||
|
||||
exports.onCompleted = new Event()
|
||||
ipcRenderer.on('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', (event, details) => {
|
||||
this.onBeforeNavigate.emit(details)
|
||||
})
|
||||
|
||||
ipcRenderer.on('CHROME_WEBNAVIGATION_ONCOMPLETED', (event, details) => {
|
||||
this.onCompleted.emit(details)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
exports.setup = () => {
|
||||
return new WebNavigation()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue