Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№108-05-2017 13:28:54

Lash
Участник
 
Группа: Members
Зарегистрирован: 08-05-2017
Сообщений: 1
UA: Firefox 43.0

Открывать все ссылки в текущей вкладке. Запрет открытия новых вкладок

Собственно, вопроса два, но смысл один.
Как с помощью ЛКМ открывать все ссылки только в текущей вкладке?
Или как полностью запретить самовольное открытие новых вкладок?
Как настроить работу левой кнопки мыши только для открытия ссылки в текущей вкладке, если быть совсем точным.

Дальше эмоции - можно не читать, просто накипело.
Для меня неприемлемо самовольное открытие новых вкладок. Не понимаю, кто и зачем это сделал и как это вообще все терпят.
Если мне нужна текущая страница, я нажимаю на колесико, но если не нужна, а там этот ненавистный тэг, то способы открыть в этой же вкладке одним нажатием на что-либо отсутствуют.
Ощущение будто браузер выходит из-под контроля. При этом открыть в другой вкладке и даже окне можно несколькими способами, а в этом же с гарантией - только перетаскиванием.
Я бы просто наказывал за тэг target=_blank. Просто вредительство какое-то. Я хочу сам контролировать свой браузер.
Вкладки множатся, браузер бухнет, комп тормозит, время уходит. Это не браузинг, а черти что.

Отсутствует

 

№208-05-2017 15:48:08

okkamas_knife
We are the Borg.       Resistance is futile.
 
Группа: Members
Зарегистрирован: 21-10-2009
Сообщений: 9006
UA: Seamonkey 2.14

Re: Открывать все ссылки в текущей вкладке. Запрет открытия новых вкладок

Lash пишет: Я хочу сам контролировать свой браузер.

кто мешает? изучай матчасть,изменяй код - всё открыто и доступно.
напиши свой www стандарт и продвинь его.
а решение находится поиском.да.


Отсутствует

 

№308-05-2017 16:42:15

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2156
UA: Firefox 42.0

Re: Открывать все ссылки в текущей вкладке. Запрет открытия новых вкладок

Lash
А так- browser.link.open_newwindow;1


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№408-05-2017 16:46:40

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 132
UA: Firefox 47.0

Re: Открывать все ссылки в текущей вкладке. Запрет открытия новых вкладок

Есть вот такая вещь. Заменяет blank на self. Работает в 95% случаев, остальные 5% - скриптовые ссылки.

target blank to target self

Выделить код

Код:

// ==UserScript==
// @name          target blank to target self
// @author        Richard Pratt
// @version       1.02
// @include       *
// @namespace     *
// @description   changes a and base target="_blank" to target="_self"
// @grant         none
// Based on earlier script by sameagain
// ==/UserScript==
var a=document.getElementsByTagName('a'),
base=document.getElementsByTagName('base');
for (i=0;i<base.length;i++)
 if (base[i].getAttribute('target')=='_blank')
  base[i].setAttribute('target','_self');
for (i=0;i<a.length;i++)
 if (a[i].getAttribute('target')=='_blank')
  a[i].setAttribute('target','_self');


И есть вот такая вещь. Работает в 100% случаев.

Open links in current tab

Выделить код

Код:

// ==UserScript==
// @name          Open links in current tab
// @author        wOxxOm
// @description   Open links in current tab regardless of _target or site's preferences. Ctrl-click: background tab, Ctrl-Shift-click: foreground tab, Shift-click: new window, Alt-click: force open in current tab
// @namespace     http://target._blank.is.retarded
// @version       2.2.7
// @include       *
// @run-at        document-start
// @grant         GM_openInTab
// ==/UserScript==

if (window == top) {
    window.addEventListener('message', function(e) {
        // some stupid sites choke on object data
        if (!/^\{/.test(e.data))
            return;
        var data = tryParse(e.data);
        if (data.name == GM_info.script.name)
            navigate(data.url);
    });
}

var suppressing, clickedElement;
window.addEventListener('mousedown', function(e) {
    clickedElement = e.target;
}, true);

window.addEventListener('mouseup', function(e) {
    if (e.button > 1 || e.target != clickedElement)
        return;
    var link = pierceShadow(e);
    if (!link
    || (link.getAttribute('href') || '').match(/^(javascript|#|$)/)
    || !document.contains(link))
        return;
    var b = e.button, c = e.ctrlKey, a = e.altKey, s = e.shiftKey, m = e.metaKey;
    if (b == 1 || c && !a && !m)
        GM_openInTab(link.href, !s || b == 1);
    else if (window.chrome && b === 0 && s && !c && !a && !m)
        link.cloneNode().dispatchEvent(new MouseEvent('click', {shiftKey: true}));
    else if (!c && !s && !m && !a) {
        if (link.target == '_blank')
            link.target = '';
        blockWindowOpenAndMutations(link);
        return;
    }
    else
        return;
    suppressing = true;
    prevent(e);
}, true);

window.addEventListener('click', prevent, true);
window.addEventListener('auxclick', prevent, true);

function prevent(e) {
    if (!suppressing)
        return;
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
    setTimeout(function() {
        suppressing = false;
    }, 50);
}

function blockWindowOpenAndMutations(link) {
    var observer = new MutationObserver(function() {
        if (link.target == '_blank') {
            link.removeAttribute('target');
            console.log('[Open links in current tab] prevented dynamic target=_blank for', link.href);
            navigate(link.href);
        }
    });
    observer.observe(link, {attributes:true, attributeFilter:['target'], characterData:true});

    var _open = unsafeWindow.open;
    var timeout = setTimeout(function() {
        unsafeWindow.open = _open;
        observer.disconnect();
    }, 50);
    unsafeWindow.open = exportFunction(function(url, name, features) {
        if (!features) {
            console.log('[Open links in current tab] prevented window.open for', url);
            navigate(link.href);
        } else
            _open(url, name, features);
        unsafeWindow.open = _open;
        clearTimeout(timeout);
    }, unsafeWindow);
}

function pierceShadow(e) {
    var el = e.target;
    while (el.shadowRoot)
        el = el.shadowRoot.elementFromPoint(e.clientX, e.clientY);
    return el.closest('a');
}

function navigate(url) {
    if (window == top) {
        var link = document.createElement('a');
        link.href = url;
        link.dispatchEvent(new MouseEvent('click'));
    } else
        top.postMessage(JSON.stringify({name: GM_info.script.name, url: url}), '*');
}

function tryParse(str) {
    try { return JSON.parse(str); }
    catch(e) {}
}

Отсутствует

 

№509-05-2017 00:26:22

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 13246
UA: Firefox 47.0
Веб-сайт

Re: Открывать все ссылки в текущей вкладке. Запрет открытия новых вкладок

поиск: все ссылки в текущей вкладке


Через сомнения приходим к истине. Цицерон

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]