Keresés

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

  • dqdb
    nagyúr

    Szép találat, türelmes voltál. :D Végül is ez esetben meg lehetne tenni, hogy a fájtl letölti, átírja ennek megfelelően, és az adott kérésre ezt az új tartalmat szolgálja ki saját extensionnel, DE ennek igen komoly hátránya, hogy "bedrótozza" a korábbi kódot, és a fájl frissülése nála nem lesz érvényes.
    Azt nézem, hogy van egy ilyen rész a kódban:

    setTimeout(function() {
    $('iframe').each(function() {
    var src = $(this).attr('src');
    if(src.match(/youtube\.com/i) || src.match(/video\.mno\.hu/i)) {
    reloadBlocker = true;
    }
    });

    if(!reloadBlocker) {
    document.location.assign(document.location.href);
    }
    }, reloadTime);

    (fúj)
    Ezek szerint ha saját extensionből csak beágyaz egy elrejtett YouTube-os iframe-et (lényeg, hogy az src attribútum a youtube-ra mutasson, nyilván az egész oldalt nem érdemes beágyazni :D), akkor a reloadBlocker változó értéke true lesz, és a document.location.assign(document.location.href); sor nem fog lefutni. :D Borzasztó ronda megoldás mindenképp, de legalább nem fog 20 perc múlva (most ez van a reloadTime-ban) újrafrissülni az oldal...

    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

    Szép találat, türelmes voltál. :D Végül is ez esetben meg lehetne tenni, hogy a fájtl letölti, átírja ennek megfelelően, és az adott kérésre ezt az új tartalmat szolgálja ki saját extensionnel, DE ennek igen komoly hátránya, hogy "bedrótozza" a korábbi kódot, és a fájl frissülése nála nem lesz érvényes.
    Azt nézem, hogy van egy ilyen rész a kódban:

    setTimeout(function() {
    $('iframe').each(function() {
    var src = $(this).attr('src');
    if(src.match(/youtube\.com/i) || src.match(/video\.mno\.hu/i)) {
    reloadBlocker = true;
    }
    });

    if(!reloadBlocker) {
    document.location.assign(document.location.href);
    }
    }, reloadTime);

    (fúj)
    Ezek szerint ha saját extensionből csak beágyaz egy elrejtett YouTube-os iframe-et (lényeg, hogy az src attribútum a youtube-ra mutasson, nyilván az egész oldalt nem érdemes beágyazni :D), akkor a reloadBlocker változó értéke true lesz, és a document.location.assign(document.location.href); sor nem fog lefutni. :D Borzasztó ronda megoldás mindenképp, de legalább nem fog 20 perc múlva (most ez van a reloadTime-ban) újrafrissülni az oldal...

    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

    Szép találat, türelmes voltál. :D Végül is ez esetben meg lehetne tenni, hogy a fájtl letölti, átírja ennek megfelelően, és az adott kérésre ezt az új tartalmat szolgálja ki saját extensionnel, DE ennek igen komoly hátránya, hogy "bedrótozza" a korábbi kódot, és a fájl frissülése nála nem lesz érvényes.
    Azt nézem, hogy van egy ilyen rész a kódban:

    setTimeout(function() {
    $('iframe').each(function() {
    var src = $(this).attr('src');
    if(src.match(/youtube\.com/i) || src.match(/video\.mno\.hu/i)) {
    reloadBlocker = true;
    }
    });

    if(!reloadBlocker) {
    document.location.assign(document.location.href);
    }
    }, reloadTime);

    (fúj)
    Ezek szerint ha saját extensionből csak beágyaz egy elrejtett YouTube-os iframe-et (lényeg, hogy az src attribútum a youtube-ra mutasson, nyilván az egész oldalt nem érdemes beágyazni :D), akkor a reloadBlocker változó értéke true lesz, és a document.location.assign(document.location.href); sor nem fog lefutni. :D Borzasztó ronda megoldás mindenképp, de legalább nem fog 20 perc múlva (most ez van a reloadTime-ban) újrafrissülni az oldal...

    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