加载不同站点后执行javascript

发布于 2024-10-23 22:00:29 字数 298 浏览 5 评论 0原文

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

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

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

I need to write a webapp, that will check if site contains an element (e.g div with id="iamhere"). This site can be any site, it's not in the same domain that my script is. I thought about doing something like:

  1. Go to my site, load javascript library.
  2. Load the other site.
  3. Execute my function.

This seems to be impossible - am I right (script execution stops after window.location.assign() and there's no way to "bind" a script tag to site's DOM)?
Does anybody has an idea, how to make it work? I know I could use yql, but maybe there's better solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云裳 2024-10-30 22:00:29

查看 JavaScript 的 setTimeout() 函数。您可以定期检查任何内容的准备情况,如下所示:

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

Check out JavaScript's setTimeout() function. You can periodically check the readiness of whatever with something like this:

function checkReadyState() 
{
  if (somethingIsReady)  {
    doStuffWhenReady();
  }
  else {
    setTimeout(function() { checkReadyState(); }, 200);   //Waits 200 milliseconds and calls checkReadyState() again.
  }
}
二手情话 2024-10-30 22:00:29

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

<?php

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

echo $file;

?>

当需要填充 div 时 - 您可以使用 javascript 来执行此操作。如果你使用 jQuery,它会看起来像这样:

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

You will need to fetch the site with a scripting language to act as a proxy. I'll use PHP in this example:

<?php

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

echo $file;

?>

When necessary to populate the div - you can do so with your javascript. If you're using jQuery it would look something like this:

<script>
$(function(){
    $('#amihere').load('myphpproxyfile.php');
});
</script>
入画浅相思 2024-10-30 22:00:29

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

I'd use YQL.

Replace the last 2 query string parameters and check the json result.

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>

Example:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文