如何从外部网站加载html? (跨域)
答案 0 :(得分:0)
如果您只想显示其他网站的完整内容,可以使用<iframe>
标记。
Ajax (带有XmlHttpRequest
对象)不能跨域工作(除了一些最近的浏览器,这可能不适合您的网站,考虑到您希望它适用于每个游客...)
但是您可以在服务器上使用代理,以便对您的站点执行Ajax请求(无跨域),并且代理从其他域获取页面,并将其返回给Ajax调用者。
该代理可以是您编写的脚本(就像一些获取参数的简单PHP脚本,并使用curl或任何等价物发出请求),或者您可以使用apache的模块proxy_http(例如,几行配置) ,没有可编写的代码,以及更好的性能方面)
或者,如果您不想使用任何类型的代理,您可以动态地构建<script>
标记,但不限于您网站所在的域名...
答案 1 :(得分:0)
这是一个例子
HTML和JAVASCRIPT代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowExternalHtml.aspx.cs" Inherits="ShowExternalHtml" %>
无标题页面
<script language="javascript" type="text/javascript">
var XMLHttp = null;
function Ajax()
{
if (window.XMLHttpRequest)
{
XMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return XMLHttp;
}
function OnStateChanged()
{
if ((XMLHttp.readyState == 4 || XMLHttp.readyState == "complete") && XMLHttp.status == 200)
{
var value = XMLHttp.responseText ;
alert(value);
}
}
function FetchRawHtmlFromWebSites()
{
XMLHttp = Ajax();
if(XMLHttp != null )
{
XMLHttp.onreadystatechange = OnStateChanged;
var urlToOpen = 'HtmlProvider.aspx?Url=' + document.getElementById("txtUrlInput").value;
try
{
XMLHttp.open("GET",urlToOpen,true);
XMLHttp.send(null);
}
catch(e)
{
alert(e);
}
}
}
</script>
<input type="text" id="txtUrlInput" name="txtUrlInput" />
<input type="button" value="Click this" onclick="FetchRawHtmlFromWebSites()" />
</div>
</form>
以下是您在服务器端需要做的事情。这个例子是用C#编写的,可以使用任何服务器端编程语言,如经典ASP,PHP PERL等等。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
public partial class HtmlProvider : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string url = Request.QueryString["Url"];
string result = string.Empty;
if (!string.IsNullOrEmpty(url))
{
string validUrl = string.Format("http://{0}", url);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(validUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
result = reader.ReadToEnd();
reader.Close();
}
Response.Clear();
Response.ClearHeaders();
Response.Write(result);
Response.End();
}
}
我希望这个例子对你有所帮助
答案 2 :(得分:-1)
使用Ajax。