如果特定的 HTML 源代码匹配,我正在寻找一种创建自动转发器(网络浏览器用户脚本)的方法。
<span class="redux">$STRING</span>
应搜索代码,如果找到此跨度类并且该$STRING
部分与某个值匹配,则必须发送重定向。
不幸的是,我非常不擅长基于 Web 的脚本,这就是我在这里问的原因。
我正在寻找的一个确切的 HTML 片段是<span class="tit">mash</span>
.
如果特定的 HTML 源代码匹配,我正在寻找一种创建自动转发器(网络浏览器用户脚本)的方法。
<span class="redux">$STRING</span>
应搜索代码,如果找到此跨度类并且该$STRING
部分与某个值匹配,则必须发送重定向。
不幸的是,我非常不擅长基于 Web 的脚本,这就是我在这里问的原因。
我正在寻找的一个确切的 HTML 片段是<span class="tit">mash</span>
.
使用 jQuery 选择类:
if($(".YourClass").length() > 0) {
window.location = "redirectURL.com";
}
问题含糊不清,但这是找到特定内容时重定向的一般方法。它使用了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;
}
其他答案支持 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 = ...
改用。]