RU AdList JS Fixes

try to take over the world!

< Feedback on RU AdList JS Fixes

Question/comment

§
Posted: 06-08-2017

Не показывает jpg, png на многих сайтах, а на ebay нет отображения перехода по ссылкам

Последние пару недель наблюдаю следующий глюк:
находясь на любом сайте, пытаюсь открыть картинку (jpg, png) хоть в новом окне, хоть в этом же самом. В адресной строке отображается адрес с картинкой, но вот сама картинка - если это новое окно, то видна просто пустая белая страница, если это то же самое окно, продолжает отображаться страница со ссылкой, а не сама картинка, как будто перехода совсем и не было, хотя, как я упоминал, в строке адреса браузера видна ссылка именно на картинку.
Например, http://radiokot.ru/forum/viewtopic.php?f=3&t=132086&start=20 , нажимаю на картинку http://img.radiokot.ru/files/108375/medium/105096snax.jpg и показывается пустое белое окно
То же самое происходит и на ebay.com, только вот не с картинками, а с самими страницами, например, при введеине ключевого слова в поисковую строку и нажатии Enter, в строке адреса отображается адрсе поискового запроса, но вот в самом окне браузера продолжает показываться предыдущая страница.

Lain inVerseAuthor
§
Posted: 06-08-2017

Здравствуйте, мой скрипт такого поведения вызвать не мог. Больше всего это похоже на проблемы с отрисовкой в самом браузере. Современные браузеры сильно полагаются на отрисовку при помощи графических ускорителей в видеокартах и это может вызывать проблемы со старыми видеокартами или некоторыми версиями драйверов на новых.

Попробуйте отключить графическое ускорение в Firefox.
https://support.mozilla.org/ru/kb/ustranenie-problem-s-rasshireniyami-temami-i-appar

Если поможет и недавно обновляли графические драйвера, то откатите их обратно и попробуйте включить ускорение.

§
Posted: 06-08-2017
Edited: 07-08-2017

Здравствуйте. Дело в том, что эти пару недель я как раз и занимался выяснением причин, и никак не мог подумать, что Ваш скрипт может быть причиной такого поведения, потому и проверил его в самый последний момент. И причиной такого поведения оказался именно он, т.к. как только я его отключаю в GreaseMonkey, так сразу картинки отображаются правильно.
Сейчас сделаю скринкаст и выложу.

Lain inVerseAuthor
§
Posted: 07-08-2017

Хм… Возможно конфликтует с каким-то расширением. Вероятнее всего влияющим на просмотр картинок. Попробуйте выключить расширения, которые могут там работать. Ещё не помешает лог ошибок из консоли (F12). Он же может указать на конкретное расширение, с которым у моего кода возникает конфликт.

§
Posted: 07-08-2017
Edited: 07-08-2017

Дело в том, что в Консоли никаких ошибок не выводится.
Что я делаю, открываю картинку http://img.radiokot.ru/files/108375/medium/105096snax.jpg в новом окне, затем открываю консоль и перезагружаю картинку - всё та же чистая белая страница и в Консоли никаких ошибок, также на вкладке Network видно, что картинка была загружена. В Инспекторе показывает, что картинка есть, но её размер 0х0.
Подскажите, пожалуйста, где еще можно посмотреть по поводу ошибок в Консоли?

Lain inVerseAuthor
§
Posted: 07-08-2017
Edited: 07-08-2017

Я же говорю скорее всего дело в совместимости с каким-то из расширений, установленных в вашем браузере. Попробуйте выключать те, которые могли бы сработать на странице с картинкой. Я у себя поставлю такое же и попробую привести совместимость в порядок или хоть придумаю как сделать так, чтоб на страницах картинок, изменённых расширением, мой код не срабатывал так-как он там даром не нужен.

§
Posted: 07-08-2017

Нашел addon, который при совместной работе с Вашим скриптом вызывает такие глюки - https://addons.mozilla.org/en-US/firefox/addon/forecastfox-fix-version/

Lain inVerseAuthor
§
Posted: 07-08-2017

Похоже одним лишь этим дополнением дело не обошлось так-как у меня проблема даже вместе с ним не воспроизвелась. Впрочем, попробуйте новую версию. Должно на страницах с картинками выходить сразу при запуске.

§
Posted: 08-08-2017

Спасибо за Ваши старания. К сожалению, не сработало - всё также картинка блокируется, когда одновременно включены и Ваш скрипт, и ForecastFox add-on. Если же выключить или скрипт, или адд-он, то картинка начинает отображаться. Прилагаю скринкаст http://rgho.st/private/7S2ZcflMx/87f7de76276a7f1d2e16e9f6098f2259

Lain inVerseAuthor
§
Posted: 08-08-2017

Спасибо за скринкаст, но я уже понял, что без этого расширения тоже всё работает. Просто я подозреваю, что дело не в нём одном и это комбинация из нескольких расширений так-как у меня скрипт + это расширение такого результата в фоксе не дают и картинка появляется вместе с погодой в углу. Возможно ещё как-то зависит от настроек погоды.

Впрочем, есть ещё идея. Попробуйте добавить себе вот такой вот новый скрипт:

// ==UserScript==
// @name         Test
// @namespace    ruadlist_js_fixes_test
// @version      1
// @description  try to take over the world!
// @author       lainverse
// @match        *://*/*
// @grant        unsafeWindow
// @grant        window.close
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';
    console.log(1);
})();

Он делает ровно одно — выдаёт в консоль сообщение 1. С ним проблем не возникает?

§
Posted: 08-08-2017

Спасибо, что пытаетесь решить данную проблему.
Установил скрипт, который выше Вы написали, назвал его "test".
А дальше Вы всё увидите на скринкасте http://rgho.st/private/6m4hsdsW7/c159d8ca51b82cb6b42da321aee00da9

Lain inVerseAuthor
§
Posted: 08-08-2017
Edited: 08-08-2017

Оок, добавим ещё немного кода:

// ==UserScript==
// @name         Test
// @namespace    ruadlist_js_fixes_test
// @version      1
// @description  try to take over the world!
// @author       lainverse
// @match        *://*/*
// @grant        unsafeWindow
// @grant        window.close
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @run-at       document-start
// ==/UserScript==
(function() {
    'use strict';
    console.log(document.constructor.prototype.toString());
    let win = (unsafeWindow || window),
        // http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
        isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0,
        isChrome = !!window.chrome && !!window.chrome.webstore,
        isSafari = (Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 ||
                    (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window.safari || safari.pushNotification)),
        isFirefox = typeof InstallTrigger !== 'undefined',
        inIFrame = (win.self !== win.top),
        _getAttribute = Element.prototype.getAttribute,
        _setAttribute = Element.prototype.setAttribute,
        _de = document.documentElement,
        _appendChild = Document.prototype.appendChild.bind(_de),
        _removeChild = Document.prototype.removeChild.bind(_de),
        _createElement = Document.prototype.createElement.bind(document);

    console.log(1);
    if (isFirefox && // Exit on image pages in Fx
        document.constructor.prototype.toString() === '[object ImageDocumentPrototype]')
        return;
    console.log(2);
})();

Возникает ли проблема с этим скриптом? Появляются ли в консоли (F12 вкладка Console) сообщения:

"[object ImageDocumentPrototype]" 1 Появляется ли 2? (не должно)

§
Posted: 08-08-2017

Заменил на новый скрипт. Вот результат - http://rgho.st/private/7lnpMVfqn/c835d416266e79a43e31cb54ba45e6f6

§
Posted: 08-08-2017

Такой вопрос, можно ли в коде основного скрипта обозначить блоки, которые по одному можно будет безопасно закомментировать, чтобы проверить, какой именно блок кода приводит к таким последствиям?

Lain inVerseAuthor
§
Posted: 08-08-2017
Edited: 08-08-2017

Оу, а вот это уже печально и похоже на глюк в том, как Greasemonkey обрабатывает мой скрипт и вставляет его на страницу, а не в самом скрипте. Попробуйте установить бета-версию GM или Tampermonkey для Firefox и проверить с ней.

Удалять/комментировать куски кода естественно можно. Так, любую конструкцию вида:

    if (...)
    {
        ...
    }

или

(function(){
    ....
})();

или вызов любой функции (например, document.addEventListener(...);), или любую другую обособленную конструкцию JS можно закомментировать и посмотреть, что получится. Правда будут мешать иногда попадающиеся внутри комментарии на основе символов /* ... */, а комментировать всё однострочными // неудобно. Вместо этого можно использовать символ ` для объявления начала и конца многострочного текстового значения. Этот символ я, вроде, нигде не применяю у себя в коде.

Например, так:


    if (isFirefox && // Exit on image pages in Fx
        document.constructor.prototype.toString() === '[object ImageDocumentPrototype]')
        return;
// ↓ начало многострочного текста ниже
`
    // dTree 2.05 in some cases replaces Node object before my script kicks in :(
    if (!Node.prototype)
    {
        let ifr = _createElement('iframe');
        _appendChild(ifr);
        try {
            window.Node = ifr.contentWindow.Node;
            console.log('Node object restored. -_-');
        } catch(e) {
            console.log('Unable to restore Node object.', e);
        }
        _removeChild(ifr);
    }
`; //← а тут конец
    // NodeList iterator polyfill (mostly for Safari)
    // https://jakearchibald.com/2014/iterators-gonna-iterate/
    if (!NodeList.prototype[Symbol.iterator]) {
        NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
    }

или так


    if (!isFirefox)
    { // scripts for non-Firefox browsers
`        // https://greasyfork.org/scripts/14720-it-s-not-important
        {
            let imptt = /((display|(margin|padding)(-top|-bottom)?)\s*:[^;!]*)!\s*important/ig,
                ret_b = (a,b) => b,
                _toLowerCase = String.prototype.toLowerCase,
            ...
            ...
            ...
            win.addEventListener (
                'load', function()
                {
                    for (let imp of document.querySelectorAll('[style*="!"]'))
                        unimportanter(imp);
                    logger();
                }, false
            );
        }
`;
        // Naive ABP Style protector
        {
            let _querySelector = Document.prototype.querySelector.bind(document);
            let _removeChild = Node.prototype.removeChild;
            ...
            ...
            ...
        }
    }
§
Posted: 08-08-2017
Edited: 08-08-2017

Точно глюк в Greasemonkey. У меня установлена последняя бета 3.11 от 28 апреля 2017. Перенес все скрипты в Tampermonkey - и случилось чудо-чудное, глюк исчез, Ваш скрипт работает и картинки нормально отображаются.
Спасибо большое!
ЗЫ. Спасибо за подсказку по поводу знаков для комментирования, а то я всё никак не мог совладать с /*....*/, т.к. вечно не там обрывались комментарии.

§
Posted: 09-08-2017

Эх, памяти кушает Tampermonkey значительно больше, нежели Greasemonkey.
Подскажите, пожалуйста, что можно указать в bug-report Greasemonkey, кроме "обрабатывает скрипт и вставляет его на страницу, а не в самом скрипте", чтобы починили такое его странное поведение?

Lain inVerseAuthor
§
Posted: 09-08-2017
Edited: 09-08-2017

Думаю имеет смысл попробовать вычислить что конкретно приводит к такому поведению. Так, например, я недавно отловил похожий глюк с Tampermonkey Beta: https://github.com/Tampermonkey/tampermonkey/issues/422
В любом случае в первую очередь важно вычислить конкретное сочетание расширений, приводящее к данной проблеме так-как одного Forecast недостаточно. Возможно стоит попробовать создать новый профиль и проводить эксперименты в нём. Без точных шагов для воссоздания бага сообщать-то и не о чём. Разве что сделать копию со своего профиля, удалить из копии все личные данные (история, пароли, кэш) и предоставить им профиль предварительно убедившись, что баг там всё ещё воспроизводится.

§
Posted: 09-08-2017

Спасибо. Буду пробовать.

Post reply

Sign in to post a reply.