【问题标题】:Executing javascript after loading different site加载不同站点后执行javascript
【发布时间】:2011-03-18 23:27:18
【问题描述】:

我需要编写一个 webapp,它将检查站点是否包含一个元素(例如 id="iamhere" 的 div)。该站点可以是任何站点,它与我的脚本不在同一个域中。我想过做类似的事情:

  1. 转到我的网站,加载 javascript 库。
  2. 加载其他网站。
  3. 执行我的函数。

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

【问题讨论】:

  • 出于明显的安全原因,这似乎是不可能的。
  • @Haochi:是的,没有脚本作为代理似乎是不可能的。

标签: web-applications cross-domain javascript yql


【解决方案1】:

查看 JavaScript 的 setTimeout() 函数。您可以通过以下方式定期检查是否准备就绪:

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

【讨论】:

  • 页面更改后超时不会触发。
  • 他说的是加载另一个网站的页面 - 所以我假设它在 iframe 或其他东西中。
  • 它可以在 iframe 中,但在大多数(每个?)浏览器中都禁止修改 iframe 内容。
【解决方案2】:

您需要使用脚本语言获取站点以充当代理。我将在此示例中使用 PHP:

<?php

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

echo $file;

?>

当需要填充 div - 您可以使用您的 javascript 来完成。如果你使用 jQuery,它看起来像这样:

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

【讨论】:

    【解决方案3】:

    我会使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2015-12-09
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多