2011-03-18 35 views
2

我需要编写一个web应用程序,它将检查网站是否包含元素(例如div与id =“iamhere”)。此网站可以是任何网站,它与我的脚本不在同一个域中。我想过做类似这样的事情:加载不同的网站后执行JavaScript

  1. 转到我的网站,载入JavaScript库。
  2. 加载其他网站。
  3. 执行我的功能。

这似乎是不可能的 - 我是对的(脚本执行在window.location.assign()后停止,并且没有办法将脚本标签“绑定”到站点的DOM)? 有没有人有一个想法,如何使其工作?我知道我可以使用yql,但也许有更好的解决方案。

+0

听起来像它不可能对明显的安全原因。 – Haochi 2011-03-19 00:12:40

+0

@Haochi:是的,没有脚本作为代理似乎是不可能的。 – david 2011-04-11 16:35:52

回答

0

查看JavaScript的setTimeout()函数。您可以定期检查任何类似的东西的准备情况:

function checkReadyState() 
{ 
    if (somethingIsReady) { 
    doStuffWhenReady(); 
    } 
    else { 
    setTimeout(function() { checkReadyState(); }, 200); //Waits 200 milliseconds and calls checkReadyState() again. 
    } 
} 
+0

页面更改后超时不会触发。 – icktoofay 2011-03-19 02:09:18

+0

他正在讨论加载另一个网站的页面 - 所以我认为它是在iframe之内的。 – Kon 2011-03-20 14:06:16

+0

它可能位于iframe中,但在大多数(每个?)浏览器中禁止修改iframe内容。 – david 2011-04-11 16:35:11

0

您需要使用脚本语言获取网站以充当代理。我将在这个例子中使用PHP:

<?php 

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

echo $file; 

?> 

当需要填充div - 你可以用你的javascript做到这一点。如果你使用jQuery,它看起来像这样:

<script> 
$(function(){ 
    $('#amihere').load('myphpproxyfile.php'); 
}); 
</script> 
0

我会使用YQL。

替换最后2个查询字符串参数并检查json结果。

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%[email protected]%20and%[email protected]=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%[email protected]%20and%[email protected]