32

我知道 JavaScript 可以在新窗口中打开链接,但是是否可以打开网页而不在窗口中打开或向用户显示?我想要做的是解析该网页的一些文本并将其用作变量。

如果没有服务器端语言的任何帮助,这可能吗?如果是这样,请给我一个可以实现这一目标的方向。

谢谢大家

4

5 回答 5

32

您可以使用XMLHttpRequest对象来执行此操作。这是一个简单的例子

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

加载后,您可以通过在 req.responseText 成员上 使用javascript 正则表达式来执行解析/抓取。

更多详情...

在实践中,您需要做更多的工作才能以跨平台方式获取 XMLHttpRequest 对象,例如:

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

或者使用图书馆...

或者,您可以省去所有的麻烦,只需使用jQueryPrototype之类的库来为您处理这个问题。

同源政策可能会咬你...

请注意,由于同源策略,您请求的页面必须与发出请求的页面来自同一域。如果要请求远程页面,则必须通过服务器端脚本代理该页面。

另一种可能的解决方法是使用 Flash 发出请求,如果目标站点使用适当配置的 crossdomain.xml 文件授予权限,它确实允许跨域请求。

这是一篇关于同源策略主题的好文章:

于 2009-02-28T11:51:46.613 回答
8

无论 Origin 是一个开源库,它允许您使用纯 Javascript 进行抓取。它还解决了“同域起源”问题。 http://www.whateverorigin.org/

$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
    alert(data.contents);
});
于 2015-10-07T08:14:15.177 回答
4

您可以在 iframe 中打开新窗口:

http://www.w3schools.com/TAGS/tag_iframe.asp

尽管请注意,如果您打开的站点来自不同的 URL,则 Javascript 访问会受到限制。这是为了防止跨站点脚本攻击:

http://en.wikipedia.org/wiki/Cross-site_scripting

于 2009-02-28T11:53:05.517 回答
4

您可以尝试使用 fetch 它的回调

fetch('https://api.codetabs.com/v1/proxy?quest=google.com').then((response) => response.text()).then((text) => console.log(text));
于 2019-10-09T02:53:50.727 回答
3

您将使用 AJAX。这将对相关 URL 发出 Get 请求并返回响应 HTML。Jquery 使这非常容易,例如

$.get("test.php");

http://docs.jquery.com/Ajax

安德鲁

于 2009-02-28T11:53:11.943 回答