mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-12 06:27:14 +03:00
Move popup to iframe
This commit is contained in:
@@ -1686,21 +1686,17 @@ function openInfoMenu() {
|
|||||||
//hide info button
|
//hide info button
|
||||||
if (playerButtons.info) playerButtons.info.button.style.display = "none";
|
if (playerButtons.info) playerButtons.info.button.style.display = "none";
|
||||||
|
|
||||||
sendRequestToCustomServer('GET', chrome.extension.getURL("popup.html"), function(xmlhttp) {
|
|
||||||
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
|
|
||||||
const popup = document.createElement("div");
|
const popup = document.createElement("div");
|
||||||
popup.id = "sponsorBlockPopupContainer";
|
popup.id = "sponsorBlockPopupContainer";
|
||||||
|
|
||||||
let htmlData = xmlhttp.responseText;
|
const frame = document.createElement("iframe");
|
||||||
// Hack to replace head data (title, favicon)
|
frame.width = "410";
|
||||||
htmlData = htmlData.replace(/<head>[\S\s]*<\/head>/gi, "");
|
frame.height = "400";
|
||||||
// Hack to replace body and html tag with div
|
frame.onload = () => frame.contentWindow.postMessage("", "*");
|
||||||
htmlData = htmlData.replace(/<body/gi, "<div");
|
frame.src = chrome.extension.getURL("popup.html");
|
||||||
htmlData = htmlData.replace(/<\/body/gi, "</div");
|
popup.appendChild(frame);
|
||||||
htmlData = htmlData.replace(/<html/gi, "<div");
|
|
||||||
htmlData = htmlData.replace(/<\/html/gi, "</div");
|
|
||||||
|
|
||||||
popup.innerHTML = htmlData;
|
|
||||||
|
|
||||||
//close button
|
//close button
|
||||||
const closeButton = document.createElement("button");
|
const closeButton = document.createElement("button");
|
||||||
@@ -1728,32 +1724,11 @@ function openInfoMenu() {
|
|||||||
parentNode = document.getElementById("watch7-sidebar-contents");
|
parentNode = document.getElementById("watch7-sidebar-contents");
|
||||||
}
|
}
|
||||||
|
|
||||||
//make the logo source not 404
|
|
||||||
//query selector must be used since getElementByID doesn't work on a node and this isn't added to the document yet
|
|
||||||
const logo = <HTMLImageElement> popup.querySelector("#sponsorBlockPopupLogo");
|
|
||||||
const settings = <HTMLImageElement> popup.querySelector("#sbPopupIconSettings");
|
|
||||||
const edit = <HTMLImageElement> popup.querySelector("#sbPopupIconEdit");
|
|
||||||
const copy = <HTMLImageElement> popup.querySelector("#sbPopupIconCopyUserID");
|
|
||||||
const check = <HTMLImageElement> popup.querySelector("#sbPopupIconCheck");
|
|
||||||
const refreshSegments = <HTMLImageElement> popup.querySelector("#refreshSegments");
|
|
||||||
const heart = <HTMLImageElement> popup.querySelector(".sbHeart");
|
|
||||||
const close = <HTMLImageElement> popup.querySelector("#sbCloseDonate");
|
|
||||||
logo.src = chrome.extension.getURL("icons/IconSponsorBlocker256px.png");
|
|
||||||
settings.src = chrome.extension.getURL("icons/settings.svg");
|
|
||||||
edit.src = chrome.extension.getURL("icons/pencil.svg");
|
|
||||||
copy.src = chrome.extension.getURL("icons/clipboard.svg");
|
|
||||||
check.src = chrome.extension.getURL("icons/check.svg");
|
|
||||||
heart.src = chrome.extension.getURL("icons/heart.svg");
|
|
||||||
close.src = chrome.extension.getURL("icons/close.png");
|
|
||||||
refreshSegments.src = chrome.extension.getURL("icons/refresh.svg");
|
|
||||||
|
|
||||||
parentNode.insertBefore(popup, parentNode.firstChild);
|
parentNode.insertBefore(popup, parentNode.firstChild);
|
||||||
|
|
||||||
//run the popup init script
|
//run the popup init script
|
||||||
runThePopup(messageListener);
|
runThePopup(messageListener);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeInfoMenu() {
|
function closeInfoMenu() {
|
||||||
const popup = document.getElementById("sponsorBlockPopupContainer");
|
const popup = document.getElementById("sponsorBlockPopupContainer");
|
||||||
|
|||||||
@@ -41,10 +41,19 @@ class MessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let allowPopup = (window === window.top);
|
||||||
|
|
||||||
|
window.onmessage = async e => {
|
||||||
|
if (e.source !== window.parent) return
|
||||||
|
if (e.origin.endsWith('.youtube.com')) return allowPopup = true;
|
||||||
|
await utils.wait(() => Config.config !== null);
|
||||||
|
if (Config.config.supportInvidious && e.origin.includes(Config.config.invidiousInstances)) return allowPopup = true;
|
||||||
|
}
|
||||||
|
|
||||||
//make this a function to allow this to run on the content page
|
//make this a function to allow this to run on the content page
|
||||||
async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||||
|
if (window !== window.top) await utils.wait(() => allowPopup === true);
|
||||||
|
|
||||||
const messageHandler = new MessageHandler(messageListener);
|
const messageHandler = new MessageHandler(messageListener);
|
||||||
|
|
||||||
utils.localizeHtmlPage();
|
utils.localizeHtmlPage();
|
||||||
|
|||||||
Reference in New Issue
Block a user