如果页面包含特定文本,则重新加载(使用javascript)

时间:2014-08-19 16:00:59

标签: javascript greasekit fluid-mac-app-engine

如果出现文字We are sorry but we made a boo boo,则

  1. 等待5秒
  2. 重载
  3. 我想在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);
    

3 个答案:

答案 0 :(得分:8)

在身体的indexOf / textContent财产上执行innerText

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

答案 1 :(得分: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之一,我们会将flag设置为true,然后在flag上执行if语句。< / p>

答案 2 :(得分:1)

  1. 如果您想查看页面中的任何位置...那么您必须这样做。获取每个DOM元素并检查是否有你的String ......我认为还有另一种方法。
  2. 是的,使用setTimeout可以在重新加载之前完成等待。