Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果HTML源代码中有某些内容,是否要使用脚本重定向到另一个页面?_Javascript_Redirect_Greasemonkey - Fatal编程技术网

Javascript 如果HTML源代码中有某些内容,是否要使用脚本重定向到另一个页面?

Javascript 如果HTML源代码中有某些内容,是否要使用脚本重定向到另一个页面?,javascript,redirect,greasemonkey,Javascript,Redirect,Greasemonkey,我正在寻找一种方法来创建一个自动转发器(web浏览器用户脚本),如果一段特定的HTML源代码匹配 应搜索代码$STRING,如果找到此span类且$STRING部分与特定值匹配,则必须发送重定向 不幸的是,我非常不擅长基于web的脚本编写,这就是为什么我要问这个问题 我要查找的一个确切的HTML代码片段是mash使用jQuery选择类: if($(".YourClass").length() > 0) { window.location = "redirectURL.com"; }

我正在寻找一种方法来创建一个自动转发器(web浏览器用户脚本),如果一段特定的HTML源代码匹配

应搜索代码
$STRING
,如果找到此span类且
$STRING
部分与特定值匹配,则必须发送重定向

不幸的是,我非常不擅长基于web的脚本编写,这就是为什么我要问这个问题


我要查找的一个确切的HTML代码片段是
mash

使用jQuery选择类:

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

这个问题很模糊,但这里有一个在找到特定内容时重定向的一般方法。它使用了以下强大功能:


其他答案支持jQuery,这不是坏事。如果出于任何原因,您希望以本机方式执行此操作,这里有两种方法(一种是需要支持较旧的浏览器,另一种是使用较新的JS)

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

后者的一个优点是它使用较新的DOMContentLoaded事件,这在本例中更可取(而onload在触发之前等待图像和其他资产加载)


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

为了澄清,您正在寻找具有特定类和特定值的范围?你能确定这个跨度是在物理源代码中,而不是通过JavaScript post DOM load插入的吗?我在一开始就被卡住了。document.getElementsByTagName('span')并不能真正帮助我,因为它不够静态,不能用于索引元素。@Marzipan这是我要找的,但你是对的。我不能肯定这一点。感谢您的提示,我将检查一下。发布您要查找的代码JS和/或HTML的精确片段。
location.replace()
覆盖历史记录,这在本例中可能是一件坏事。这取决于重定向的性质。50/50,我会说。我将编辑答案以指出此处的选项。旁注:默认Greasemonkey脚本(Firefox)中不需要
onload
DOMContentLoaded
。在默认的Chrome用户脚本中,它们也不可靠。答案的其余部分可以使用,除了应该使用
textContent
而不是
innerHTML
。感谢大家的贡献。出于某种原因,Firebug会为您列出的所有方法(innerText、textContent、innerHTML)返回“undefined”(未定义),这显然是问题所在,其他所有方法现在都正常工作。Firefox的哪个版本?如果您在实际元素上检查innerHTML,它就不可能返回undefined,因为该属性永远存在。textContent是较新的,因此我为您提供了一种传统方法和一种适用于较新浏览器的方法。
// ==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;
}
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;
        }
    }

};
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);