Keresés

Új hozzászólás Aktív témák

  • dqdb

    nagyúr

    válasz Sk8erPeter #5505 üzenetére

    Akkor íme egy Chrome/Opera extension kettőtök kutatása alapján egy kicsit kulturáltabb injektálási módszerrel.

    manifest.json
    {
    "content_scripts":
    [
    {
    "matches": [ "http://mno.hu/*", "https://mno.hu/*" ],
    "js": [ "content.js" ],
    "run_at": "document_start"
    }
    ],
    "web_accessible_resources":
    [
    "patch.js"
    ],

    "manifest_version": 2,
    "name": "setTimeout patch",
    "version": "1.0.0"
    }

    patch.js
    Window.prototype._setTimeout = Window.prototype.setTimeout;

    Window.prototype.setTimeout = function(func, delay) {
    if (func.toString().indexOf("reloadBlocker") !== -1)
    console.log('blocked setInterval', delay);
    else
    Window.prototype._setTimeout.apply(this, arguments);
    };

    content.js
    try {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.responseText) {
    var patch = document.createElement("script");
    patch.type = "text/javascript";
    patch.innerText = xhr.responseText;
    (document.head || document.documentElement).appendChild(patch);
    }
    };

    xhr.open("GET", chrome.extension.getURL("patch.js"), true);
    xhr.send(null);
    }
    catch (ex) {
    console.log(ex);
    }

    Vagy Firefox alá Greasemonkey scriptként:

    // ==UserScript==
    // @name setTimeout patch
    // @namespace mno.hu
    // @include http://mno.hu/*
    // @include https://mno.hu/*
    // @version 1
    // @run-at document-start
    // @grant none
    // ==/UserScript==

    window._setTimeout = window.setTimeout;

    window.setTimeout = function(func, delay) {
    if (func.toString().indexOf("reloadBlocker") !== -1)
    console.log('blocked setInterval', delay);
    else
    window._setTimeout.apply(window, arguments);
    };

    Érdekes módon itt csak a window példányt tudtam manipulálni, és abban lecserélni a metódust, magát a Window osztályt nem, hogy a prototípusban cserélgessek.

    Természetesen nem vártam ki a 20 percet, a naplóba írt üzenettel teszteltem a kódot.

  • cocka

    veterán

    válasz Sk8erPeter #5505 üzenetére

    Jajj de ez már ilyen jquerys borzalom, amiből még annyit se értek. :D Igazából nem azért nem értem, mert nem tudnám megérteni, hanem mert nem ismerem a függvényeket.

  • Karma

    félisten

    válasz Sk8erPeter #5505 üzenetére

    Találtam egy rövidebb verziót.
    Ez a blokk átverhető a window.history.pushState-tel:

    if(document.location.href.match(/hirtv_kesleltetett/i) || document.location.href.match(/hirtv_live/i)) {
    reloadBlocker = true;
    }

    Például így: window.history.pushState({}, null, "hirtv_live").

    Egy kicsit fejre áll tőle a böngésző, de a feltétel biztosan igaz lesz tőle :D

Új hozzászólás Aktív témák