如何使用JavaScript下载网页

8

可能重复:
JavaScript可以读取任何网页的源码吗?

我想使用javascript下载文件并解析它。 我需要一个像php的file_get_contents()函数一样的函数。 我找了,但是找不到。

更新:感谢解决方案,但我忘记写AJAX不适合这个问题,因为我没有访问远程地址且存在跨域请求问题。 我也无法设置任何php代理,因为我的主机阻止访问fopen。 我更喜欢纯javascript的解决方案。

PS:抱歉,但问题确实重复了(我不知道),提供的解决方案在这里完美地解决了此问题。


3
您想下载文件还是网页?网页是由多个文件组成的。此外,您需要哪种上下文中的代码?浏览器插件、网页脚本还是服务器端JavaScript? - Caimen
1
好的旧XMLHttpRequest去哪了? - geekman
@Caimen:我想要下载一个HTML文件。这意味着它只是一个文件,因为我只需要解析它,不需要样式等内容。 - MMS
4个回答

8

了解XMLHttp请求或者JQuery的load、$.get、$.post和$.ajax方法。以下是一个示例:

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

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
两件事:w3fools一些真正的文档 - jbabey
1
是的,但我不认为初学者会阅读文档。我不知道你怎么看。但是w3schools帮助了我入门。 好吧,我要去看文档链接了,谢谢。 - geekman
4
初学者应该绝对阅读文档。 - jbabey
1
好的,我在17岁时尝试使用PHP,但那一切看起来都像法语。 - geekman
2
这是因为 它是 php ;) - jbabey
老兄,这里写着“我爱PHP” :D - geekman

4
简短的问题,简洁的答案:您可能想要尝试一些Ajax。通过调用本地php脚本并使用file_get_contents()返回页面,或直接调用外部URL。但是,您的浏览器可能不允许您这样做。 补充: 您更新了问题,表示您希望有一个纯JavaScript解决方案。我认为您无法实现这一点,因为您正在尝试获取的内容不是JSONP。此外,您说您的主机阻止了fopen(),我曾经使用过同样的主机。我很惊讶地发现他们没有阻止使用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

请看XMLHttpRequest,它可以异步从网络下载文件。

如果您打算使用jquery,请查看.ajax(),它封装了XMLHttpRequest。


1

Iframe:在您的页面上放置一个不可见的iframe。

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

触发下载[点击或其他事件处理程序等],并设置Iframe的URL。 例如,“/location/file”

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

这将触发浏览器下载。

另一种方法是直接导航到下载URL,浏览器会发现MIME类型无法显示,并呈现下载对话框。使用

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

What if it's an HTML file? - Someone_who_likes_SE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接