Букмарклет для автоматического обновления и поиска текста на странице? - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь написать букмарклет, чтобы автоматически обновлять страницу каждый период ожидания, И искать некоторый текст после каждого обновления (цель состоит в том, чтобы перехватить определенный текст в ту минуту, когда он появляется на странице).

Мне удалось сделать автообновление, как здесь: http://www.google.com/support/forum/p/Chrome/thread?tid=1a37ccbdde5902fd

И мне удалось сделать периодический поиск (без обновления) с кодом вроде:

setTimeout('reload()',1000*timeout);
function reload(){
  setTimeout('reload()',1000*timeout);
  searchText();
  window.location.reload();
}
function searchText() {
  var myRegExp = 'so';
  var t = document.body.innerHTML;
  var matchPos1 = t.search(myRegExp);
  if(matchPos1 != -1)
alert("There was a match at position " + matchPos1); 
  else
alert("no match");
}

НоЯ не могу получить автообновление И поиск, работающий вместе.Кто-нибудь?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Решено (ну почти ...)

javascript:
var myRegExp = prompt("Enter text to watch out for");
timeout=prompt("Set timeout [s]");
current=location.href;
setTimeout('reload()',1000*timeout);

function reload(){
  var found = searchText();
  if (!found) {
    setTimeout('reload()',1000*timeout);
    fr4me='<frameset cols=\'*\'>\n<frame id="frame01" src=\''+current+'\'/>';
    fr4me+='</frameset>';
    with(document){write(fr4me);void(close())};
  }
}

function searchText() {
  var f = document.getElementById("frame01");
  if (f != null && f.contentDocument != null) {
    var t = f.contentDocument.body.innerHTML;
    var matchPos = t.search(myRegExp);
    if(matchPos != -1) {
      alert("There was a match at position " + matchPos); 
      return true;
    }
    else {
      return false;
    }
  }
}
1 голос
/ 09 ноября 2011

Я полагаю, что проблема в том, что ваш букмарклет перезагрузки обновит страницу, уничтожив JavaScript, который был добавлен на страницу букмарклетом.Даже если вы удалите вызов searchText, я ожидаю, что вы увидите, что страница перезагружается только один раз.Повторная загрузка стирает созданное вами setTimeout.

Вероятно, вы могли бы решить эту проблему, используя решение в размещенной вами ссылке, в котором используется фрейм.Поскольку он перезагружает только фрейм, а не всю страницу, он не уничтожит ваш JavaScript.

...