Doplňky do prohlížeče Firefox
  • Rozšíření
  • Motivy vzhledu
    • pro Firefox
    • Slovníky a jazykové balíčky
    • Ostatní stránky prohlížeče
    • Doplňky pro Android
Přihlásit se
Náhled Lazy tabs

Lazy tabs od martin

Open links in paused (discarded) tabs and pause selected tabs (from the right-click context menu). Also with "Lazy Mode".

4.3 (3 reviews)4.3 (3 reviews)
33 uživatelů33 uživatelů
Pro používání tohoto rozšíření potřebujete Firefox
Stáhnout Firefox a nainstalovat toto rozšíření
Stáhnout soubor

Metadata rozšíření

Snímky obrazovky
Pause this tabLazy ModeOpen in paused tab
O tomto rozšíření
This extension allows you to discard tabs and open links, bookmarks and bookmark folders in discarded tabs.

It adds a button on the tab bar that turns on/off the "Lazy Mode".
When Lazy Mode is ON all new background tabs are automatically paused.

You can't pause the current active tab, just switch to another tab and pause it from there.
If you have bookmarks with URLs like addons.vaultpit.io or support.mozilla.org, you should open them from the context menu item, Lazy Mode can't intercept requests to that sites for security reasons, I guess. This only happens with bookmarks and Lazy mode, otherwise everything works fine.

This add-on needs some permissions. If you're worried about that, just read the source code. It will take you less than a minute.

BACKGROUND.JS

let lazyMode = false;
let lastOpenedTabId = 1;

function initialUpdate(tabs){
for (let tab of tabs) {
updateLastOpenedTabId(tab.id);
}
}

function updateLastOpenedTabId(tabId){
if (tabId > lastOpenedTabId) {
lastOpenedTabId = tabId;
}
}

function onDiscarded() {
}

function onError(error) {
console.log(`Error: ${error}`);
}

function onCreatedItem() {
if (browser.runtime.lastError) {
console.log(`Error: ${browser.runtime.lastError}`);
}
}

function onCreatedTab(tab) {
updateLastOpenedTabId(tab.id);
}

function createDiscardedTab(tabUrl) {
var creating = browser.tabs.create({
url:tabUrl,
active:false,
discarded:true
});
creating.then(onCreatedTab, onError);
}

function onGetBookmarkId(bookmarks) {
if (bookmarks[0].url) {
createDiscardedTab(bookmarks[0].url)
} else {
getFolderChildren(bookmarks[0].id);
}
}

function getFolderChildren(bookmarkId) {
var gettingChildren = browser.bookmarks.getChildren(bookmarkId);
gettingChildren.then(onGetFolderChildren, onError);
}

function onGetFolderChildren(children) {
for (child of children) {
if (child.url){
createDiscardedTab(child.url);
} else {
getFolderChildren(child.id);
}
}
}

function toggleLazyMode(isEnabled){
if (!isEnabled) {
let querying = browser.tabs.query({});
querying.then(initialUpdate, onError);
browser.browserAction.setTitle({title: "Back to normal"});
browser.browserAction.setIcon({path: "playButton.svg"});
lazyMode = true;
} else {
browser.browserAction.setTitle({title: null});
browser.browserAction.setIcon({path: null})
lazyMode = false;
}
}

function discardThisTabs(tabs) {
var tabIds = [];
for (let tab of tabs) {
tabIds.push(tab.id);
}
var discarding = browser.tabs.discard(tabIds);
discarding.then(onDiscarded, onError);
}

function discardNewTab(tabId, url) {
var removing = browser.tabs.remove(tabId);
removing.then(function(tab) {
createDiscardedTab(url);
}, onError);
}

browser.menus.create({
id: "open-link-discarded",
title: "Open link in paused tab",
contexts: ["link"]
}, onCreatedItem);

browser.menus.create({
id: "open-bookmark-discarded",
title: "Open in paused tab",
contexts: ["bookmark"]
}, onCreatedItem);

browser.menus.create({
id: "discard-tab",
title: "Pause this tab",
contexts: ["tab"]
}, onCreatedItem);

browser.menus.create({
id: "discard-highlighted-tabs",
title: "Pause selected tabs",
contexts: ["tab"]
}, onCreatedItem);

browser.menus.onClicked.addListener((info, tab) => {
switch (info.menuItemId) {
case "open-link-discarded":
createDiscardedTab(info.linkUrl);
break;
case "open-bookmark-discarded":
let gettingBookmarks = browser.bookmarks.get(info.bookmarkId);
gettingBookmarks.then(onGetBookmarkId, onError);
break;
case "discard-highlighted-tabs":
let querying = browser.tabs.query({highlighted: true, active: false});
querying.then(discardThisTabs, onError);
break;
case "discard-tab":
discardThisTabs([tab]);
}
});

browser.browserAction.onClicked.addListener(() => {
toggleLazyMode(lazyMode);
});

browser.tabs.onCreated.addListener((tab) => {
if (tab.active && tab.id > lastOpenedTabId) {
updateLastOpenedTabId(tab.id);
}
});

browser.webRequest.onBeforeRequest.addListener((requestDetails)=>{
if(lazyMode){
if (!requestDetails.documentUrl && requestDetails.tabId > lastOpenedTabId){
discardNewTab(requestDetails.tabId, requestDetails.url);
}
}
},
{urls: ["<all_urls>"]}
);

browser.webNavigation.onCreatedNavigationTarget.addListener((details)=>{
if(lazyMode){
discardNewTab(details.tabId,details.url);
}
});

MANIFEST.JSON

{
"manifest_version": 2,
"name":"Lazy tabs",
"description":"Open links in paused (discarded) tabs and pause selected tabs (from the right-click context menu). Also with \"Lazy Mode\".",
"version":"3",
"developer": {
"name": "martin"
},
"background": {
"scripts": ["background.js"]
},
"permissions": [
"<all_urls>",
"webRequest",
"webNavigation",
"menus",
"bookmarks",
"tabs"
],
"browser_action": {
"browser_style": true,
"default_icon": "pauseButton.svg",
"default_title": "Lazy mode",
"default_area": "tabstrip"
}
}
Ohodnoceno 4,3 1 redaktorem
Pro hodnocení tohoto rozšíření se přihlaste
Zatím nehodnoceno

Hodnocení bylo uloženo

5
1
4
2
3
0
2
0
1
0
Přečíst všechny 3 recenze
Oprávnění a dataZjistit více

Požadovaná oprávnění:

  • Číst a upravovat záložky
  • Přistupovat k panelům prohlížeče
  • Přistupovat k aktivitám prohlížeče během prohlížení
  • Přistupovat k vašim datům pro všechny webové stránky
Další informace
Verze
4
Velikost
10,06 KB
Poslední aktualizace
před 4 lety (3. čvc 2021)
Příbuzné kategorie
  • Panely
Licence
Pouze GNU General Public License v3.0
Historie změn
  • Zobrazit všechny verze
Přidat do sbírky
Nahlásit tento doplněk
Další doplňky od autora martin
  • Zatím nehodnoceno

  • Zatím nehodnoceno

  • Zatím nehodnoceno

  • Zatím nehodnoceno

  • Zatím nehodnoceno

  • Zatím nehodnoceno

Přejít na domovskou stránku Mozilly

Počet doplňků

  • O nás
  • Blog doplňků pro Firefox
  • Workshop tvorby rozšíření
  • Pro vývojáře
  • Pravidla pro vývojáře
  • Blog komunity
  • Fórum
  • Nahlásit chybu
  • Příručka recenzenta

Prohlížeče

  • Desktop
  • Mobile
  • Enterprise

Produkty

  • Browsers
  • VPN
  • Relay
  • Monitor
  • Pocket
  • Bluesky (@firefox.com)
  • Instagram (Firefox)
  • YouTube (firefoxchannel)
  • Ochrana soukromí
  • Cookies
  • Právní informace

Není-li uvedeno jinak, obsah této stránky je šířen pod licencí Creative Commons Uveďte původ-Zachovejte licenci 3.0 nebo jakoukoli novější verzí.