О навигаторе:
http://spec.piramidin.com/clientref13/nav.htm
По ссылке даже, если изменить useragent с помощью сриптов можно вытащить какой браузер.
http://whoer.net/extended
Пример того, как блокируется событие:
// ==UserScript==
// @name BlockUnloadEvents
// @namespace http://theaceoffire.8k.com/STOPTHEMADDNESS
// @description This stops ANY AND ALL javascript that stops you from leaving a page. Inspired by this greasemonky script: http://userscripts.org/scripts/show/20781
// @include *
// ==/UserScript==
(function() {
unsafeWindow.onbeforeunload = null;unsafeWindow.onunload = null;
//unsafeWindow.alert = null;
//unsafeWindow.confirm = null;
//unsafeWindow.prompt = null;
//unsafeWindow.open = null;
})();
Как по аналогии блокировать navigator? Пробовал так:
// ==UserScript==
// @name Block
// @namespace http://theaceoffire.8k.com/STOPTHEMADDNESS
// @description
// @include *
// ==/UserScript==
(function() {
unsafeWindow.navigator = null;//unsafeWindow.alert = null;
//unsafeWindow.confirm = null;
//unsafeWindow.prompt = null;
//unsafeWindow.open = null;
})();
Вроде не работает.
Отсутствует
okkamas_knife
Меня интересует конкретно этот случай. Хотя бы из любопытства.
Отсутствует
Понятно.
Все свойства объекта navigator - только для чтения/read-only.
Как это можно обойти?
Отсутствует
Тут минимум две проблемы – переписать свойства navigator'а до выполнения скриптов страницы и переписать их так, чтобы было не определить факт подмены, иначе можно будет отслеживать по факту блокировки (ведь блокирующих явно будет мало).
По запуску до скриптов страницы нужны исследования. Если и правда не обойтись без binding'ов, то binding может быть только один, так что, видимо, сломается RightToClick. Или надо динамически создавать расширяющий binding. Удастся ли при этом работать более, чем двум таким расширениям – неизвестно.
По незаметной подмене, возможно, может помочь https://developer.mozilla.org/en/JavaSc … ects/Proxy. А может и не помочь.
Вроде бы, автор ABP уже пытался: http://adblockplus.org/blog/do-javascri … n-wrappers, только в результате блокировка всплывающих окон была сделана иначе:
// // nsIObserver interface implementation // observe: function(subject, topic, data, additional) { switch (topic) { case "content-document-global-created": { if (!(subject instanceof Ci.nsIDOMWindow) || !subject.opener) return; let uri = additional || Utils.makeURI(subject.location.href); if (!Policy.processNode(subject.opener, subject.opener.document, Policy.type.POPUP, uri, false)) { subject.stop(); Utils.runAsync(subject.close, subject); }
Object.__defineGetter__.call( top.opener.content.navigator, "language", function() { return "foo"; } );
Вроде, Ok – ошибок нет.
Ошибка: attempt to run compile-and-go script on a cleared scope
При проверке со страницы в navigator.language по-прежнему исходное значение.
Так что есть довольно большая вероятность, что без изменений изнутри ничего не получится.
И потом все равно надо будет переопределить еще и toLocaleString():
new Date().toLocaleString(); // 4 Февраль 2012 г. 00:00:00
123456.789.toLocaleString(); // 123 456,789
Плюс браузер можно определить по тому, что он поддерживает. А это и CSS, и HTML5, и куча всего прочего.
Другое дело, что мало кому надо заниматься исследованиями по такому определению браузера.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
достаточно на страничке указать какую нибудь из стандартных локальных картинок и потом скриптом проверить загрузилась она или нет.
Не, это уже исправили (если вообще когда-то можно было, не помню):
Попытка нарушения системы безопасности: содержимое «http://forum.mozilla-russia.org/viewtopic.php?pid=544357#p544357» не имеет права загружать file:///C:/Users/Public/Pictures/Sample%20Pictures/Chrysanthemum.jpg или ссылаться на него.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует