Если страница содержит определенный текст, перезагрузите (используя JavaScript)
Если текст We are sorry but we made a boo boo
появляется тогда
- Подождите 5 секунд
- перезагружать
Я хотел бы сделать это в 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 ответа
Просто сделайте 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);
}
Это может работать:
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
мы хотим проверить, мы перебираем значения и сравниваем msg
против bodyText
, Если bodyText
содержит один из msg
х, мы поставили flag
в true
, а затем выполнить оператор if на flag
,
- Если вы хотите проверить где-нибудь на странице... тогда вы должны сделать именно это. Получить каждый элемент DOM и проверить, есть ли там ваша строка... Я не думаю, что есть другой способ.
- Да, использование setTimeout поможет при ожидании перед перезагрузкой.