通过Javascript下载网站的favicon.ico

时间:2014-01-10 17:11:46

标签: javascript php jquery html ajax

我尝试过Ajax:

$.ajax({
  type : "GET",
  url : "http://getfavicon.appspot.com/http://www.google.com",
  success : function(result) {
      // use the .ico result somewhere
  }
});

给了我错误:

XMLHttpRequest cannot load http://getfavicon.appspot.com/http://www.google.com. No
'Access-Control-Allow-Origin' header is present on the requested resource. Origin
'http://localhost' is therefore not allowed access.

所以我尝试在我的Apache服务器上允许CORS,但发现我下载的网站需要允许CORS。如果我理解这一点,我无法通过javascript,图片,文字,诸如此类从外部域名下载任何内容?

我尝试通过ajax在我的网络服务器上调用php脚本来解决这个问题:

var domain = "www.google.com";
$.ajax({
   type : "POST",
   url : "php/fetchIcon.php",
   data : {
     'domainName' : domain
   },
   success : function(result) {
     // use the .ico result somewhere
   }
});

fetchIcon.php:

$domainName = false;
if(isset($_POST['domainName'])){
    $domainName = $_POST['domainName'];
}
echo file_get_contents("http://getfavicon.appspot.com/http://".$domainName, true);

在Ajax成功结果中,我得到了图像的二进制代码,但它似乎在某种程度上被打破了。

  1. 如果我想显示.ico文件,可以执行以下操作: “document.getElementById(”img“)。src = result;” ?在我的项目中,我想使用“THREE.ImageUtils.loadTexture(result);”。但对于这个问题来说,这有点太多了。

  2. 我是否需要使用Base64编码/解码以及如何使用?

  3. 有没有更简单的方法或黑客只在没有PHP的Javascript中做到这一点?

  4. 提前致谢。

3 个答案:

答案 0 :(得分:1)

这对我有用,Rocket Hazmat回答:

fetchIcon.php:

$domainName = false;
if(isset($_GET['domainName'])){
    $domainName = $_GET['domainName'];
}
echo file_get_contents("http://getfavicon.appspot.com/http://".$domainName, true);

显示它在没有CORS限制的情况下工作的最简单方法:

      <img src="fetchIcon.php?domainName=www.google.com" />

否则这就足够了:

      <img src="http://getfavicon.appspot.com/http://www.google.com"/> 

或者我想在THREE.js中加载一个新纹理制服的方式,在javascript中,我一直在问题之外,但也许有人遇到了和我一样的问题:

iconUniform.map.value = THREE.ImageUtils.loadTexture("fetchIcon.php?domainName=www.google.com");

答案 1 :(得分:1)

嗯,我认为你让它变得更复杂,我尝试了下面的代码,它很适合我

        <img id='favicon' src='http://getfavicon.appspot.com/http://www.google.com'/> 

那你为什么要使用ajax请求,即使你想改变图像的图像,你可以使用javascript轻松完成

   document.getElementById('favicon').src="address"; //address  can contain new source

答案 2 :(得分:0)

我不确定你是否意味着下载下载到文件,但这可以用PHP完成。如果你需要它来返回JS函数的路径,你可以调用这个AJAX样式......

$url = 'http://getfavicon.appspot.com/http://www.google.com';
$img = 'icons/favicon.ico';
file_put_contents($img, file_get_contents($url));