Выполнение javascript после загрузки другого сайта

Мне нужно написать веб-приложение, которое будет проверять, содержит ли сайт элемент (например, div с id="iamhere"). Это может быть любой сайт, он не находится в том же домене, что и мой скрипт. Я думал сделать что-то вроде:

  1. Зайдите на мой сайт, загрузите библиотеку javascript.
  2. Загрузите другой сайт.
  3. Выполняй мою функцию.

Это кажется невозможным - я прав (выполнение скрипта останавливается после window.location.assign() и нет возможности "привязать" тег скрипта к DOM сайта)? У кого-нибудь есть идея, как заставить его работать? Я знаю, что мог бы использовать yql, но, возможно, есть лучшее решение.


person david    schedule 18.03.2011    source источник
comment
Похоже, это невозможно по очевидным соображениям безопасности.   -  person Haochi    schedule 19.03.2011
comment
@Haochi: да, без скрипта в качестве прокси это невозможно.   -  person david    schedule 11.04.2011


Ответы (3)


Ознакомьтесь с функцией JavaScript setTimeout(). Вы можете периодически проверять готовность чего угодно примерно так:

function checkReadyState() 
{
  if (somethingIsReady)  {
    doStuffWhenReady();
  }
  else {
    setTimeout(function() { checkReadyState(); }, 200);   //Waits 200 milliseconds and calls checkReadyState() again.
  }
}
person Kon    schedule 18.03.2011
comment
Тайм-ауты не срабатывают после изменения страницы. - person icktoofay; 19.03.2011
comment
Он говорит о загрузке страницы другого сайта, поэтому я предполагаю, что это внутри iframe или что-то в этом роде. - person Kon; 20.03.2011
comment
Это может быть iframe, но изменение содержимого iframe запрещено в большинстве (каждых?) браузерах. - person david; 11.04.2011

Вам нужно будет получить сайт с языком сценариев, чтобы действовать как прокси. Я буду использовать PHP в этом примере:

<?php

$file = file_get_contents('http://www.google.com');

echo $file;

?>

Когда необходимо заполнить div, вы можете сделать это с помощью своего javascript. Если вы используете jQuery, это будет выглядеть примерно так:

<script>
$(function(){
    $('#amihere').load('myphpproxyfile.php');
});
</script>
person philwinkle    schedule 19.03.2011

Я бы использовал YQL.

Замените последние 2 параметра строки запроса и проверьте результат json.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url=@url%20and%20xpath=@xpathformat=json&callback=cvfunc&url=<your-url>&xpath=<your-xpath>

Пример:

http://query.yahooapis.com/v1/public/yql?format=json&callback=cbfunc&url=http://www.stackoverflow.com&xpath=//div[@id=%27header%27]&q=select%20*%20from%20html%20where%20url=@url%20and%20xpath=@xpath
person Giacomo    schedule 06.05.2011