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

-- ほとんど重複した回答で申し訳ありません:\ --

- 編集 -

教えてください - 2 番目のルールを追加するにはどうすればよいですか。これは、エラー メッセージの別の言い方です: システムに内部エラーが発生しました。問題を記録し、後で調査します。

これにより、両方のメッセージがチェックされます。

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の 1 つが含まれている場合msg、 を に設定し、flagに対してtrueif ステートメントを実行しflagます。

于 2014-08-19T16:07:38.193 に答える
1
  1. ページのどこかをチェックしたい場合は、それを行う必要があります。すべての DOM 要素を取得し、そこに文字列があるかどうかを確認します...別の方法はないと思います。
  2. はい、setTimeout を使用すると、リロード前に待機するためのトリックが実行されます。
于 2014-08-19T16:03:17.680 に答える