iframe redirector

iframe

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name           iframe redirector
// @namespace      http://efcl.info/
// @include        http://ow.ly/*
// @include        http://ht.ly/*
// @include        http://oneclip.jp/*
// @include        http://am6.jp/*
// @version 0.0.1.20140518104350
// @description iframe
// ==/UserScript==
(function() {
    /* URL : Xpath */
    var hashURL = {
        'http://ow.ly/' : 'id("hootFrame")',
        'http://oneclip.jp/' : 'id("close")/a',
        'http://am6.jp/' : 'id("infoFrame")/a[text()="閉じる"])',
        'http://ht.ly/' : 'id("hootFrame")'
    };
    var sourceURL = getCloseURL();
    if (sourceURL) {
        location.href = sourceURL;
    }
    function getCloseURL() {
        var nURL = location.href;
        for (var i in hashURL) {
            var linkTag = $x(document, hashURL[i])[0];
            if (linkTag) {
                if (linkTag.tagName == "IFRAME") {
                    return linkTag.src;
                } else { // aTag
                    return linkTag.href;
                }
            } else {
                return getOriginalIframe().src;
            }
        }
        return false;
    }

    /*
     Redirect to the iframed URL
     http://userscripts.org/scripts/show/66765
     Takayuki Miwa (http://wp.serpere.info)
     The MIT License; http://www.opensource.org/licenses/mit-license.php
     */
    function isLargeEnough(elm) {
        var ratio = 0.5;
        var body = $x(document, '/html/body')[0];
        return elm.offsetWidth > body.offsetWidth * ratio &&
                elm.offsetHeight > body.offsetHeight * ratio;
    }

    function getOriginalIframe() {
        var iframes = $x(document, '/html/body//iframe');
        for (var i = 0; i < iframes.length; ++i) {
            if (isLargeEnough(iframes[i])) {
                return iframes[i];
            }
        }
        return false;
    }

    function $x(context, exp) {
        context || (context = document);
        var expr = (context.ownerDocument || context).createExpression(exp, function (prefix) {
            return document.createNSResolver(context.documentElement || context).lookupNamespaceURI(prefix) ||
                    context.namespaceURI || document.documentElement.namespaceURI || "";
        });

        var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
        switch (result.resultType) {
            case XPathResult.STRING_TYPE : return result.stringValue;
            case XPathResult.NUMBER_TYPE : return result.numberValue;
            case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
            case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
                // not ensure the order.
                var ret = [], i = null;
                while (i = result.iterateNext()) ret.push(i);
                return ret;
        }
        return null;
    }
})();