如果某些内容在HTML源代码中,则重定向到另一个页面的脚本?

时间:2012-06-15 21:36:57

标签: javascript redirect greasemonkey

如果特定的HTML源代码匹配,我正在寻找一种创建自动转发器(web-browser userscript)的方法。

应搜索代码<span class="redux">$STRING</span>,如果找到此span类并且$STRING部分与某个值匹配,则必须发送重定向。

不幸的是我在基于网络的脚本上非常糟糕,这就是我在这里问的原因。

我正在寻找的确切HTML代码段为<span class="tit">mash</span>

3 个答案:

答案 0 :(得分:0)

使用jQuery选择类:

if($(".YourClass").length() > 0) {
    window.location = "redirectURL.com";
}

答案 1 :(得分:0)

问题很模糊,但这是一种在找到特定内容时重定向的一般方法。它使用了jQuery的强大力量:

// ==UserScript==
// @name     _Redirect on specfic contents
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==

var redirectURL = "http://xkcd.com/870/";
var triggerStr  = "Buy more beer!";     // Regex allowed.

/*--- Extend jQuery with a case-insensitive version of contains().
    Also allows regular expressions.
*/
jQuery.extend (
    jQuery.expr[':'].containsCI = function (a, i, m) {
        //--- The next is faster than jQuery(a).text()...
        var sText   = (a.textContent || a.innerText || "");     
        var zRegExp = new RegExp (m[3], 'i');

        return zRegExp.test (sText);
    }
);

//--- The following selector depends mightily on exact page details!
var targetTextNode  = $('div span.redux:containsCI(' + triggerStr + ')');
if (targetTextNode.length) {
    document.location   = redirectURL;
}

答案 2 :(得分:0)

其他答案都支持jQuery,这不是坏事。如果出于任何原因你想本地做这个,这里有两种方法(一种是你需要支持旧浏览器,一种是使用更新的JS)。

方法1(适用于旧浏览器)

window.onload = function() {

    var spans = document.getElementsByTagName('span');

    for (var i=0, len=spans.length; i<len; i++) {
        if (/\bsome_class\b/.test(spans[i].className) && spans[i].innerHTML == look_for_value) {
            location.replace('some/redirect.php');
        break;
        }
    }

};

方法2(较新的浏览器)

document.addEventListener('DOMContentLoaded', function() {
    Array.prototype.forEach.call(document.body.querySelectorAll('.some_class'), function(el) {
        if (el.innerHTML == 'some value') {
            location.replace('some/redirect.php');
            return;
        }
    });
}, false);

后者的一个优点是它使用较新的DOMContentLoaded事件,在这种情况下更为可取(而onload会等待图像和其他资产在触发前加载)。

[编辑 - 正如Brock指出的那样,location.replace()会覆盖当前页面的历史记录条目。有一些重定向(大多数?)这是你想要的,但不一定。如果没有,请改用location.href = ...。]