如何使用javascript下载网页

时间:2012-09-26 19:35:54

标签: javascript

  

可能重复:
  Can Javascript read the source of any web page?

我想使用javascript下载文件并解析它。我需要像php的file_get_contents()这样的函数。我找了它,但我找不到任何东西。

更新:感谢您提供解决方案,但我忘了写AJAX没有解决这个问题,因为我没有任何访问远程地址的权限,并且有跨域请求问题。我也无法设置任何php代理,因为我的主机阻止访问fopen。我更喜欢纯粹的JavaScript解决方案。

PS:对不起,但问题实际上是重复的(我不知道)并且提供的解决方案here非常适合这个问题。

4 个答案:

答案 0 :(得分:4)

查看XMLHttp请求

http://www.w3schools.com/xml/xml_http.asp

或JQuery.Here的load,$ .get,$ .post和$ .ajax方法是一个样本

var request = new XMLHttpRequest(); 
request.open("GET", 'http://www.url.com');
request.onreadystatechange = function() { 
if (request.readyState === 4 && request.status === 200) {

//response handling code

}
};
request.send(null); // Send the request now

答案 1 :(得分:3)

简短的问题,简短的回答:你可能想玩一些Ajax。通过调用本地php脚本创建file_get_contents()并将其返回页面,或直接调用外部URL。您的浏览器可能不允许您这样做。

<强>加了: 您更新了问题,说明更喜欢纯粹的JavaScript解决方案。我不认为你可以,因为你试图获取不是JSONP的东西。 此外,你说你的主机阻止fopen(),我曾经在他们做同样的主机上。我很惊讶地发现他们没有阻止use of sockets,这是我的解决方法:

$server = "www.example.com";
$path = "/path/index.html";
$type = "HTTP/1.1";

$fp = fsockopen($server, 80, $errno, $errstr, 30);
if (!$fp) echo "$errstr ($errno)<br />\n";
else {
    $out  = "GET $path $type\r\n";
    $out .= "Host: $server\r\n";
    $out .= "User-Agent: Mozilla 4.0\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $contents = "";
    while (!feof($fp)) $contents .= fgets($fp, 128);
    fclose($fp);
    echo $contents;
}

我意识到你不想要PHP代理解决方案,我想你可能别无选择。试一试,对我来说很棒。如果您的托管也阻止了fsockopen(),那么您可能会失败。

答案 2 :(得分:1)

看看XMLHttpRequest。它从Web异步下载文件。

如果您打算使用jquery,请查看包含XMLHttpRequest的.ajax()。

答案 3 :(得分:0)

<强> I帧: 在页面上放置一个不可见的iframe,

<iframe id="frame1" style="display:none"></iframe>

触发下载[点击或其他一些eventt处理程序等],并设置Iframe的URL。 例如,"/location/file"

var iframe =  document.getElementById("frame1");
iframe .src = "/location/file";

这将触发从浏览器下载。

另一种方法是简单地导航到下载URL,浏览器确定无法显示MIME类型并显示下载对话框。使用

window.location.href = "/location/file";