164 lines
5.7 KiB
JavaScript
164 lines
5.7 KiB
JavaScript
/**
|
||
* Блокирует Яндекс-Советник на страницах вашего интернет-магазина
|
||
* https://github.com/SerjoPepper/kick_sovetnik
|
||
* Если скрипт по каким то причинам перестал работать или что-то ломает на вашем сайте, пожалуйста, создайте тикет:
|
||
* https://github.com/SerjoPepper/kick_sovetnik/issues
|
||
*/
|
||
|
||
//if ("Notification" in window) {
|
||
// Notification = {permission: 'denied'};
|
||
//}
|
||
|
||
|
||
|
||
var _yBrowser = (typeof navigator != 'undefined' && typeof navigator.appVersion != 'undefined' && navigator.appVersion.indexOf('YaBrowser') != -1) ? true : false;
|
||
|
||
if(_yBrowser){
|
||
|
||
|
||
!function(){var e=function(){var e=window.location.hash||!1,t=(document.currentScript||document.getElementById("ss_script"),function(t){e&&"#ssdebug"===e&&console.log(t)});if(!window.MutationObserver)return t("MutationObserver not supported!"),!1;if(navigator.userAgent.indexOf("MSIE")!=-1||navigator.userAgent.indexOf("Trident")!=-1||navigator.userAgent.indexOf("Edge")!=-1)return t("IE or Edge"),!1;var n={},o=!1,r={top:"-1px",display:"table",opacity:"1"},i=new MutationObserver(function(e){e.map(function(e){var n=e.addedNodes[0];if(n&&"DIV"===n.tagName)for(var a in r){if(window.getComputedStyle(n).getPropertyValue(a)!==r[a]){t("YandexDesktopFound-"+a+" false"),o=!1;break}t("YandexDesktopFound-"+a+" true"),o=!0}if(n&&"STYLE"===n.tagName&&/market_context_headcrab_container_relative/.test(n.innerHTML)&&(document.body.removeChild(n),t("style removed")),o){for(var s=n.childNodes,d=0;d<s.length;d++){var u=s[d];u.style&&(u.style.position="absolute")}n&&n.style&&(n.style.transform="translate(-10000px, -10000px)"),setTimeout(function(){i.disconnect()},1e4),t("Elements removed!")}})}),a=new MutationObserver(function(){var e=document.documentElement.style.marginTop;e&&parseInt(e)>0&&!n.panel&&(document.documentElement.style.marginTop="")}),s=new MutationObserver(function(){var e=document.body.style.marginTop;e&&parseInt(e)>0&&!n.panel&&(document.body.style.marginTop="")}),d=function(){return document.body?(i&&i.observe(document.body,{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a&&a.observe(document.documentElement,{attributes:!0,attributeFilter:["style"]}),void(s&&s.observe(document.body,{attributes:!0,attributeFilter:["style"]}))):void setTimeout(d,100)};e&&"#ssoff"===e||d()};e()}();
|
||
|
||
|
||
}else{
|
||
|
||
(function () {
|
||
|
||
|
||
function patchOnMessage() {
|
||
window.addEventListener('message', function (e) {
|
||
var data;
|
||
if (typeof e.data === 'string') {
|
||
try {
|
||
data = JSON.parse(e.data);
|
||
}
|
||
catch (e) {
|
||
return;
|
||
}
|
||
} else {
|
||
data = e.data;
|
||
}
|
||
if (data && data.type === 'MBR_ENVIRONMENT') {
|
||
e.stopImmediatePropagation();
|
||
e.stopPropagation();
|
||
e.data = {};
|
||
}
|
||
}, true);
|
||
}
|
||
|
||
var observer;
|
||
|
||
function init () {
|
||
try {
|
||
observer = new MutationObserver(function (records) {
|
||
check(records);
|
||
});
|
||
} catch (e) {
|
||
|
||
}
|
||
if (document.body) {
|
||
checkNodes(document.body.children);
|
||
}
|
||
}
|
||
|
||
function startObserve () {
|
||
if (!document.body) {
|
||
setTimeout(startObserve, 200);
|
||
return;
|
||
}
|
||
if (observer) {
|
||
observer.observe(document.body, {childList: true});
|
||
}
|
||
}
|
||
|
||
function stopObserve () {
|
||
if (observer) {
|
||
observer.disconnect();
|
||
observer = null;
|
||
}
|
||
}
|
||
|
||
// Проверки
|
||
function check (records) {
|
||
records.forEach(function (record) {
|
||
var addedNodes = record.addedNodes;
|
||
if (addedNodes && addedNodes.length) {
|
||
checkNodes(addedNodes);
|
||
}
|
||
});
|
||
}
|
||
|
||
function checkNodes (nodes) {
|
||
Array.prototype.slice.call(nodes).forEach(function (node) {
|
||
if (isDiv(node) && (hasSovetnikLink(node) || isYaBar(node))) {
|
||
remove(node);
|
||
}
|
||
});
|
||
}
|
||
|
||
// Скрываем яндекс-советник со страницы, возвращаем прежний margin-top для body
|
||
function remove (node) {
|
||
|
||
var style = node.style;
|
||
style.marginTop = '-200px';
|
||
style.zIndex = '-9999';
|
||
style.webkitTransform =
|
||
style.MozTransform =
|
||
style.msTransform =
|
||
style.OTransform =
|
||
style.transform = 'translate(-9999px, -9999px)';
|
||
// следим в течении 3 сек за изменением marginTop у html
|
||
var marginObserver = new MutationObserver(function () {
|
||
var marginTop = document.documentElement.style.marginTop;
|
||
if (marginTop && parseInt(marginTop, 10) !== 0) {
|
||
document.documentElement.style.marginTop = '';
|
||
}
|
||
});
|
||
setTimeout(function () {
|
||
marginObserver.disconnect();
|
||
marginObserver = null;
|
||
}, 5e3);
|
||
marginObserver.observe(document.documentElement, {attributes: true, attributeFilter: ['style']});
|
||
document.documentElement.style.marginTop = '';
|
||
}
|
||
|
||
// Определяем по косвенным признакам, что этот элемент - Яндекс-Советник
|
||
function isYaBar (node) {
|
||
var bgColor = getStyle(node, 'background-color');
|
||
return (bgColor === 'rgb(250, 223, 118)' || bgColor === 'rgb(250, 223, 117)') &&
|
||
getStyle(node, 'position') === 'fixed' &&
|
||
getStyle(node, 'display') === 'table';
|
||
}
|
||
|
||
function isDiv (node) {
|
||
return node.tagName === 'DIV';
|
||
}
|
||
|
||
function hasSovetnikLink (node) {
|
||
return !!node.querySelector('[href*="sovetnik.market.yandex.ru"]');
|
||
}
|
||
|
||
function getStyle (node, prop) {
|
||
return window.getComputedStyle(node).getPropertyValue(prop);
|
||
}
|
||
|
||
try {
|
||
init();
|
||
startObserve();
|
||
patchOnMessage();
|
||
setTimeout(stopObserve, 15e3);
|
||
} catch (e) {
|
||
|
||
}
|
||
|
||
|
||
})();
|
||
|
||
|
||
}
|
||
|
||
$(function(){
|
||
$('div').each(function(){
|
||
//console.log($(this))
|
||
})
|
||
})
|