2

如果文本We are sorry but we made a boo boo出现然后

  1. 等待 5 秒
  2. 重新加载

我想在 JavaScript 中做到这一点。

这是一个尝试

(function () {
"use strict";

function walkTheDOM(node, func) {
    if (node && node.nodeType) {
        if (typeof func === "function") {
            func(node);
        }

        node = node.firstChild;
        while (node) {
            walkTheDOM(node, func);
            node = node.nextSibling;
        }
    }
}

function filterElementsByContains(elements, string) {
    var toStringFN = {}.toString,
        text = toStringFN.call(elements),
        result,
        length,
        i,
        element;

    if (text !== "[object NodeList]" && text !== "[object Array]" && !($() instanceof jQuery)) {
        return result;
    }

    result = [];
    if (typeof string === "string") {
        string = new RegExp("^" + string + "$");
    } else if (toStringFN.call(string) !== "[object RegExp]") {
        return result;
    }

    function getText(node) {
        if (node.nodeType === 3) {
            text += node.nodeValue;
        }
    }

    length = elements.length;
    i = 0;
    while (i < length) {
        text = "";
        element = elements[i];
        walkTheDOM(element, getText);
        if (string.test(text)) {
            result.push(element);
        }

        i += 1;
    }

    return result;
}

if(filterElementsByContains([document.getElementsByTagName("table")[0]], /We are sorry but we made a boo boo/).length) {
    location.reload();
}

我认为,如果文本出现在特定位置,上述内容应该适用于文本。我想让它更通用 - 以便文本可以出现在该页面的任何位置。

另外,我想知道如何添加暂停,例如,它在重新加载之前等待 5 秒。

我想我会添加类似的内容:

setTimeout(
function() 
{
//location.reload();
}, 5000);
4

3 回答 3

9

只需在正文的textContent / innerText属性上执行indexOf

var content = document.body.textContent || document.body.innerText;
var hasText = content.indexOf("We are sorry but we made a boo boo")!==-1;
if(hasText){
   setTimeout(function(){
       window.location = "http://www.example.com";
   },5000);
}
于 2014-08-19T16:04:01.093 回答
3

这可能有效:

var bodyText = document.body.textContent || document.body.innerText;
var msg = "We are sorry but we made a boo boo";

if (bodyText.indexOf(msg) > -1) {
    setTimeout(function() {
        location.reload();
    }, 5000);
}

--抱歉几乎重复的答案:\ --

- 编辑 -

告诉我 - 我怎样才能添加第二条规则,这是错误消息的另一种表述方式:我们的系统中存在内部错误。我们记录了问题,稍后将对其进行调查。

这将检查两条消息:

var bodyText = document.body.textContent || document.body.innerText;
var msg = [
    "We are sorry but we made a boo boo",
    "There was an internal error in our system. We logged the problem and will investigate it later."
];

var flag = false;

for (var i = 0; i < msg.length; i++) {
    if bodyText.indexOf(msg[i]) {
        flag = true;
    }
}

if (flag) {
    setTimeout(function() {
        location.reload();
    }, 5000);   
}

说明:我所做的只是修改msg为字符串数组而不是字符串本身。然后对于msg我们想要检查的每一个,我们循环遍历这些值并msgbodyText. 如果bodyText包含其中一个msg,我们将 a 设置flagtrue,然后在 上执行 if 语句flag

于 2014-08-19T16:07:38.193 回答
1
  1. 如果你想检查页面中的任何地方......那么你必须这样做。获取每个 DOM 元素并检查那里是否有您的 String ......我认为没有其他方法。
  2. 是的,使用 setTimeout 可以在重新加载之前进行等待。
于 2014-08-19T16:03:17.680 回答