try to take over the world!
Здравствуйте, мой скрипт такого поведения вызвать не мог. Больше всего это похоже на проблемы с отрисовкой в самом браузере. Современные браузеры сильно полагаются на отрисовку при помощи графических ускорителей в видеокартах и это может вызывать проблемы со старыми видеокартами или некоторыми версиями драйверов на новых.
Попробуйте отключить графическое ускорение в Firefox.
https://support.mozilla.org/ru/kb/ustranenie-problem-s-rasshireniyami-temami-i-appar
Если поможет и недавно обновляли графические драйвера, то откатите их обратно и попробуйте включить ускорение.
Здравствуйте. Дело в том, что эти пару недель я как раз и занимался выяснением причин, и никак не мог подумать, что Ваш скрипт может быть причиной такого поведения, потому и проверил его в самый последний момент. И причиной такого поведения оказался именно он, т.к. как только я его отключаю в GreaseMonkey, так сразу картинки отображаются правильно.
Сейчас сделаю скринкаст и выложу.
Хм… Возможно конфликтует с каким-то расширением. Вероятнее всего влияющим на просмотр картинок. Попробуйте выключить расширения, которые могут там работать. Ещё не помешает лог ошибок из консоли (F12). Он же может указать на конкретное расширение, с которым у моего кода возникает конфликт.
Дело в том, что в Консоли никаких ошибок не выводится.
Что я делаю, открываю картинку http://img.radiokot.ru/files/108375/medium/105096snax.jpg в новом окне, затем открываю консоль и перезагружаю картинку - всё та же чистая белая страница и в Консоли никаких ошибок, также на вкладке Network видно, что картинка была загружена. В Инспекторе показывает, что картинка есть, но её размер 0х0.
Подскажите, пожалуйста, где еще можно посмотреть по поводу ошибок в Консоли?
Я же говорю скорее всего дело в совместимости с каким-то из расширений, установленных в вашем браузере. Попробуйте выключать те, которые могли бы сработать на странице с картинкой. Я у себя поставлю такое же и попробую привести совместимость в порядок или хоть придумаю как сделать так, чтоб на страницах картинок, изменённых расширением, мой код не срабатывал так-как он там даром не нужен.
Нашел addon, который при совместной работе с Вашим скриптом вызывает такие глюки - https://addons.mozilla.org/en-US/firefox/addon/forecastfox-fix-version/
Похоже одним лишь этим дополнением дело не обошлось так-как у меня проблема даже вместе с ним не воспроизвелась. Впрочем, попробуйте новую версию. Должно на страницах с картинками выходить сразу при запуске.
Спасибо за Ваши старания. К сожалению, не сработало - всё также картинка блокируется, когда одновременно включены и Ваш скрипт, и ForecastFox add-on. Если же выключить или скрипт, или адд-он, то картинка начинает отображаться. Прилагаю скринкаст http://rgho.st/private/7S2ZcflMx/87f7de76276a7f1d2e16e9f6098f2259
Спасибо за скринкаст, но я уже понял, что без этого расширения тоже всё работает. Просто я подозреваю, что дело не в нём одном и это комбинация из нескольких расширений так-как у меня скрипт + это расширение такого результата в фоксе не дают и картинка появляется вместе с погодой в углу. Возможно ещё как-то зависит от настроек погоды.
Впрочем, есть ещё идея. Попробуйте добавить себе вот такой вот новый скрипт:
// ==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. С ним проблем не возникает?
Спасибо, что пытаетесь решить данную проблему.
Установил скрипт, который выше Вы написали, назвал его "test".
А дальше Вы всё увидите на скринкасте http://rgho.st/private/6m4hsdsW7/c159d8ca51b82cb6b42da321aee00da9
Оок, добавим ещё немного кода:
// ==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? (не должно)
Заменил на новый скрипт. Вот результат - http://rgho.st/private/7lnpMVfqn/c835d416266e79a43e31cb54ba45e6f6
Такой вопрос, можно ли в коде основного скрипта обозначить блоки, которые по одному можно будет безопасно закомментировать, чтобы проверить, какой именно блок кода приводит к таким последствиям?
Оу, а вот это уже печально и похоже на глюк в том, как 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;
...
...
...
}
}
Точно глюк в Greasemonkey. У меня установлена последняя бета 3.11 от 28 апреля 2017. Перенес все скрипты в Tampermonkey - и случилось чудо-чудное, глюк исчез, Ваш скрипт работает и картинки нормально отображаются.
Спасибо большое!
ЗЫ. Спасибо за подсказку по поводу знаков для комментирования, а то я всё никак не мог совладать с /*....*/, т.к. вечно не там обрывались комментарии.
Эх, памяти кушает Tampermonkey значительно больше, нежели Greasemonkey.
Подскажите, пожалуйста, что можно указать в bug-report Greasemonkey, кроме "обрабатывает скрипт и вставляет его на страницу, а не в самом скрипте", чтобы починили такое его странное поведение?
Думаю имеет смысл попробовать вычислить что конкретно приводит к такому поведению. Так, например, я недавно отловил похожий глюк с Tampermonkey Beta: https://github.com/Tampermonkey/tampermonkey/issues/422
В любом случае в первую очередь важно вычислить конкретное сочетание расширений, приводящее к данной проблеме так-как одного Forecast недостаточно. Возможно стоит попробовать создать новый профиль и проводить эксперименты в нём. Без точных шагов для воссоздания бага сообщать-то и не о чём. Разве что сделать копию со своего профиля, удалить из копии все личные данные (история, пароли, кэш) и предоставить им профиль предварительно убедившись, что баг там всё ещё воспроизводится.
Спасибо. Буду пробовать.
Не показывает 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, в строке адреса отображается адрсе поискового запроса, но вот в самом окне браузера продолжает показываться предыдущая страница.