show iframe popups in root frame
This commit is contained in:
parent
3684a479c5
commit
6806e7055f
@ -20,6 +20,7 @@
|
|||||||
* Frontend
|
* Frontend
|
||||||
* PopupProxy
|
* PopupProxy
|
||||||
* PopupProxyHost
|
* PopupProxyHost
|
||||||
|
* apiForward
|
||||||
*/
|
*/
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
@ -29,7 +30,25 @@ async function main() {
|
|||||||
const {id, depth=0, parentFrameId, url, proxy=false} = data;
|
const {id, depth=0, parentFrameId, url, proxy=false} = data;
|
||||||
|
|
||||||
let popup;
|
let popup;
|
||||||
if (proxy) {
|
if (!proxy && (window !== window.parent)) {
|
||||||
|
let rootPopupInformationResolve;
|
||||||
|
const rootPopupInformationPromise = new Promise((resolve) => (rootPopupInformationResolve = resolve));
|
||||||
|
|
||||||
|
const runtimeMessageCallback = ({action, params}, sender, callback) => {
|
||||||
|
if (action === 'rootPopupInformation') {
|
||||||
|
chrome.runtime.onMessage.removeListener(runtimeMessageCallback);
|
||||||
|
callback();
|
||||||
|
rootPopupInformationResolve(params);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
chrome.runtime.onMessage.addListener(runtimeMessageCallback);
|
||||||
|
apiForward('rootPopupInformationGet');
|
||||||
|
|
||||||
|
const {popupId, frameId} = await rootPopupInformationPromise;
|
||||||
|
|
||||||
|
popup = new PopupProxy(popupId, 0, null, frameId, url);
|
||||||
|
} else if (proxy) {
|
||||||
popup = new PopupProxy(null, depth + 1, id, parentFrameId, url);
|
popup = new PopupProxy(null, depth + 1, id, parentFrameId, url);
|
||||||
} else {
|
} else {
|
||||||
const popupHost = new PopupProxyHost();
|
const popupHost = new PopupProxyHost();
|
||||||
|
@ -52,7 +52,8 @@ class Frontend extends TextScanner {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
this._runtimeMessageHandlers = new Map([
|
this._runtimeMessageHandlers = new Map([
|
||||||
['popupSetVisibleOverride', ({visible}) => { this.popup.setVisibleOverride(visible); }]
|
['popupSetVisibleOverride', ({visible}) => { this.popup.setVisibleOverride(visible); }],
|
||||||
|
['rootPopupInformationGet', () => { this.popup.broadcastRootPopupInformation(); }]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* global
|
/* global
|
||||||
|
* apiForward
|
||||||
* apiGetMessageToken
|
* apiGetMessageToken
|
||||||
* apiInjectStylesheet
|
* apiInjectStylesheet
|
||||||
*/
|
*/
|
||||||
@ -79,6 +80,20 @@ class Popup {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async broadcastRootPopupInformation() {
|
||||||
|
if (this._depth === 0) {
|
||||||
|
try {
|
||||||
|
const {frameId} = await this._frameIdPromise;
|
||||||
|
if (typeof frameId === 'number') {
|
||||||
|
this._frameId = frameId;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// NOP
|
||||||
|
}
|
||||||
|
apiForward('rootPopupInformation', {popupId: this._id, frameId: this._frameId});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async setOptions(options) {
|
async setOptions(options) {
|
||||||
this._options = options;
|
this._options = options;
|
||||||
this.updateTheme();
|
this.updateTheme();
|
||||||
@ -202,6 +217,10 @@ class Popup {
|
|||||||
// NOP
|
// NOP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._depth === 0) {
|
||||||
|
apiForward('rootPopupInformation', {popupId: this._id, frameId: this._frameId});
|
||||||
|
}
|
||||||
|
|
||||||
if (this._messageToken === null) {
|
if (this._messageToken === null) {
|
||||||
this._messageToken = await apiGetMessageToken();
|
this._messageToken = await apiGetMessageToken();
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,11 @@
|
|||||||
"mixed/js/api.js",
|
"mixed/js/api.js",
|
||||||
"mixed/js/text-scanner.js",
|
"mixed/js/text-scanner.js",
|
||||||
"fg/js/document.js",
|
"fg/js/document.js",
|
||||||
|
"fg/js/frontend-api-sender.js",
|
||||||
"fg/js/frontend-api-receiver.js",
|
"fg/js/frontend-api-receiver.js",
|
||||||
"fg/js/popup.js",
|
"fg/js/popup.js",
|
||||||
"fg/js/source.js",
|
"fg/js/source.js",
|
||||||
|
"fg/js/popup-proxy.js",
|
||||||
"fg/js/popup-proxy-host.js",
|
"fg/js/popup-proxy-host.js",
|
||||||
"fg/js/frontend.js",
|
"fg/js/frontend.js",
|
||||||
"fg/js/frontend-initialize.js"
|
"fg/js/frontend-initialize.js"
|
||||||
|
Loading…
Reference in New Issue
Block a user