Changed URL loading from window.create to browser.tabs.create
This commit is contained in:
@@ -48,13 +48,16 @@ const deleteFromStorage = (elm = null, name = null) => {
|
||||
}
|
||||
|
||||
const windowMaker = (i, keysLength, keys, json) => {
|
||||
for (; i < keysLength; i++) {
|
||||
let store = json[keys[i]];
|
||||
let urls = [];
|
||||
|
||||
for (let j = 0; j < store.length; j++) {
|
||||
urls.push(store[j].link);
|
||||
}
|
||||
windowApi.create({ url: urls });
|
||||
for (; i < keysLength; i++) {
|
||||
|
||||
let _store = json[keys[i]];
|
||||
|
||||
browser.runtime.sendMessage(
|
||||
{
|
||||
action: "new-window",
|
||||
store: _store
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
75
src/scripts/listener.js
Normal file
75
src/scripts/listener.js
Normal file
@@ -0,0 +1,75 @@
|
||||
const onMessageListener = async (request, sender, sendResponse) => {
|
||||
switch (request.action) {
|
||||
case "new-window": {
|
||||
let store = request.store;
|
||||
let newWindow = await browser.windows.create({focused: false});
|
||||
|
||||
for (let i = 0; i < store.length; i++) {
|
||||
let createOption = (store[i].link !== "about:newtab") ?
|
||||
{
|
||||
active: false,
|
||||
discarded: true,
|
||||
pinned: false,
|
||||
url: store[i].link,
|
||||
windowId: newWindow.id,
|
||||
index: i + 1
|
||||
}
|
||||
: { };
|
||||
|
||||
browser.tabs.create(createOption).catch( async (e) => {
|
||||
createOption.url = returnReplaceURL(
|
||||
"open_faild",
|
||||
store[i].title,
|
||||
store[i].link,
|
||||
"../images/icons/error.png"
|
||||
);
|
||||
|
||||
await browser.tabs.create(createOption);
|
||||
});
|
||||
}
|
||||
|
||||
let tabs = await browser.tabs.query({currentWindow: true});
|
||||
|
||||
browser.tabs.update(tabs.at(-1).id, { active: true });
|
||||
browser.tabs.remove( tabs.at(0).id )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const returnReplaceURL = (state, title, url, favIconUrl) => {
|
||||
let retUrl =
|
||||
"/pages/replaced.html"
|
||||
+ "?state="
|
||||
+ encodeURIComponent(state)
|
||||
+ "&title="
|
||||
+ encodeURIComponent(title)
|
||||
+ "&url="
|
||||
+ encodeURIComponent(url)
|
||||
+ "&favIconUrl="
|
||||
+ encodeURIComponent(favIconUrl)
|
||||
+ "&theme=dark";
|
||||
|
||||
// Reader mode
|
||||
if (url.startsWith("about:reader?url=")) {
|
||||
retUrl =
|
||||
"/pages/replaced.html?state="
|
||||
+ encodeURIComponent(state)
|
||||
+ "&title="
|
||||
+ encodeURIComponent(title)
|
||||
+ "&url="
|
||||
+ url.slice(17)
|
||||
+ "&favIconUrl="
|
||||
+ encodeURIComponent(favIconUrl)
|
||||
+ "&openInReaderMode=true&theme=dark"
|
||||
+ "&theme=dark";
|
||||
}
|
||||
|
||||
return retUrl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
browser.runtime.onMessage.addListener(onMessageListener);
|
||||
54
src/scripts/replaced.js
Normal file
54
src/scripts/replaced.js
Normal file
@@ -0,0 +1,54 @@
|
||||
const sanitaize = {
|
||||
encode: str => {
|
||||
str = str || "";
|
||||
return str
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
},
|
||||
decode: str => {
|
||||
str = str || "";
|
||||
return str
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.replace(/&/g, "&");
|
||||
}
|
||||
};
|
||||
|
||||
let parameter = returnReplaceParameter(location.href);
|
||||
|
||||
document.title = parameter.title;
|
||||
document.getElementsByClassName("title")[0].innerText = parameter.title;
|
||||
document.getElementsByClassName("replacedUrl")[0].value = parameter.url;
|
||||
if (parameter.favIconUrl === "" || parameter.favIconUrl === "undefined") {
|
||||
parameter.favIconUrl = "../icons/nofavicon.png";
|
||||
}
|
||||
document.head.insertAdjacentHTML(
|
||||
"beforeend",
|
||||
`<link rel="shortcut icon" href="${sanitaize.encode(parameter.favIconUrl)}">`
|
||||
);
|
||||
document.body.dataset.theme = parameter.theme || "light";
|
||||
|
||||
const copy = () => {
|
||||
const url = document.querySelector(".replacedUrl");
|
||||
url.select();
|
||||
document.execCommand("Copy");
|
||||
document.querySelector(".copyButton").innerText = "Copied.";
|
||||
};
|
||||
|
||||
document.querySelector(".copyButton").onclick = copy;
|
||||
|
||||
function returnReplaceParameter(url) {
|
||||
let parameter = {};
|
||||
let paras = url.split("?")[1].split("&");
|
||||
|
||||
for (let p of paras) {
|
||||
parameter[p.split("=")[0]] = decodeURIComponent(p.split("=")[1]);
|
||||
}
|
||||
|
||||
return parameter;
|
||||
}
|
||||
62
src/scripts/replaced_.js
Normal file
62
src/scripts/replaced_.js
Normal file
@@ -0,0 +1,62 @@
|
||||
const sanitaize = {
|
||||
encode: str => {
|
||||
str = str || "";
|
||||
return str
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
},
|
||||
decode: str => {
|
||||
str = str || "";
|
||||
return str
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.replace(/&/g, "&");
|
||||
}
|
||||
};
|
||||
|
||||
let parameter = returnReplaceParameter(location.href);
|
||||
|
||||
document.title = parameter.title;
|
||||
document.getElementsByClassName("title")[0].innerText = parameter.title;
|
||||
document.getElementsByClassName("replacedUrl")[0].value = parameter.url;
|
||||
|
||||
if (parameter.favIconUrl === "" || parameter.favIconUrl === "undefined") {
|
||||
parameter.favIconUrl = "../icons/nofavicon.png";
|
||||
}
|
||||
|
||||
document.head.insertAdjacentHTML(
|
||||
"beforeend",
|
||||
`<link rel="shortcut icon" href="${sanitaize.encode(parameter.favIconUrl)}">`
|
||||
);
|
||||
document.body.dataset.theme = parameter.theme || "light";
|
||||
|
||||
const copy = () => {
|
||||
const url = document.querySelector(".replacedUrl");
|
||||
url.select();
|
||||
document.execCommand("Copy");
|
||||
document.querySelector(".copyButton").innerText = browser.i18n.getMessage("copiedLabel");
|
||||
};
|
||||
|
||||
document.querySelector(".copyButton").onclick = copy;
|
||||
document.querySelector(".copyButton").innerText = browser.i18n.getMessage("copyUrlLabel");
|
||||
|
||||
if (parameter.state == "open_faild") {
|
||||
document.getElementsByClassName("replacedPageMessage")[0].innerText = browser.i18n.getMessage(
|
||||
"replacedPageMessage"
|
||||
);
|
||||
}
|
||||
|
||||
function returnReplaceParameter(url) {
|
||||
let parameter = {};
|
||||
let paras = url.split("?")[1].split("&");
|
||||
for (let p of paras) {
|
||||
parameter[p.split("=")[0]] = decodeURIComponent(p.split("=")[1]);
|
||||
}
|
||||
|
||||
return parameter;
|
||||
}
|
||||
@@ -37,17 +37,12 @@ const loadContainer = (sessionData, keys, keysLength, divID) => {
|
||||
|
||||
|
||||
|
||||
|
||||
/* Selection Process */
|
||||
const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
|
||||
let invalidURLsMessage = document.createElement("P")
|
||||
let container = document.createElement("DIV");
|
||||
let ulTemplate = document.querySelector('#ulTemplate');
|
||||
let liTemplate = document.querySelector('#liTemplate');
|
||||
|
||||
invalidURLsMessage.innerText = "The Session has invalid URLs (highlighted for convenience). They might break loading of a session...";
|
||||
invalidURLsMessage.classList.add("warning");
|
||||
|
||||
for (let i = 0; i < keysLength; i++) {
|
||||
let ulClone = document.importNode(ulTemplate.content, true);
|
||||
let ulTag = ulClone.querySelector('.collection');
|
||||
@@ -60,7 +55,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
|
||||
let ulLblTag2 = ulClone.querySelector('.titleAllLbl');
|
||||
let store = json[keys[i]];
|
||||
let j = 0;
|
||||
let hasInvalidURLs = false;
|
||||
|
||||
container.id = "editSelectionContainer";
|
||||
selAll.id = "selectAllWin" + i;
|
||||
@@ -99,13 +93,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
|
||||
|
||||
inptTag.setAttribute("name", "Win" + i); // Used for toggle select all
|
||||
|
||||
if (/(file:\/\/|ws:\/\/|wss:\/\/|moz-extension:\/\/|about:)/.test(tab.link)) {
|
||||
liTag.classList.add("error-bg");
|
||||
lblTag.classList.add("error");
|
||||
lblTag2.classList.add("error");
|
||||
hasInvalidURLs = true;
|
||||
}
|
||||
|
||||
lblTag.appendChild(labelTxt);
|
||||
lblTag2.appendChild(labelTxt2);
|
||||
|
||||
@@ -114,10 +101,6 @@ const generateSelectionWindow = (json = "", keys = null, keysLength = 0) => {
|
||||
j++;
|
||||
});
|
||||
|
||||
if (hasInvalidURLs) {
|
||||
container.appendChild(invalidURLsMessage);
|
||||
}
|
||||
|
||||
container.appendChild(ulClone);
|
||||
}
|
||||
|
||||
@@ -171,12 +154,10 @@ const getSessionData = (windows) => {
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
let links = [];
|
||||
for (var ii = 0; ii < windows[i].tabs.length; ii++) {
|
||||
if (!windows[i].tabs[ii].url.includes("about:")) {
|
||||
links.push(
|
||||
{"link" : windows[i].tabs[ii].url.trim(),
|
||||
"title" : windows[i].tabs[ii].title.trim()}
|
||||
);
|
||||
}
|
||||
links.push(
|
||||
{"link" : windows[i].tabs[ii].url.trim(),
|
||||
"title" : windows[i].tabs[ii].title.trim()}
|
||||
);
|
||||
}
|
||||
sessionData["WindowID:" + windows[i].id] = links;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user