1

如何从外部站点加载 html?(跨域)

4

3 回答 3

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();
    }
}

我希望这个例子对你有帮助

于 2009-07-16T19:15:33.013 回答
0

如果您只想显示来自另一个网站的页面的全部内容,您可以使用<iframe>标签。

Ajax (带XmlHttpRequest对象)不能跨域工作(除了一些最近的浏览器,考虑到您希望它对每个访问者都有效,这可能不适合您的网站......)但是您可以在您的服务器上使用代理,以便 Ajax 请求完成到您的站点(无跨域),并且代理从其他域获取页面,并将其返回给 Ajax 调用者。

该代理可以是您编写的脚本(例如一些简单的获取参数的 PHP 脚本,并使用 curl 或任何等效项发出请求),或者您可以使用 apache 的模块 proxy_http,例如(只需几行配置,无需代码写,并且在性能方面更好)

或者,如果您不想使用任何类型的代理,您可以动态构建一个<script>标签,该标签不限于您网站所在的域...

于 2009-07-16T18:58:45.637 回答
-1

使用阿贾克斯

于 2009-07-16T18:00:55.423 回答