Букмарклет: Загрузить внешний сайт html - PullRequest
1 голос
/ 16 июля 2009

как я могу загрузить HTML с внешнего сайта? (кросс-домен)

Ответы [ 3 ]

0 голосов
/ 16 июля 2009

Если вы просто хотите отобразить весь контент страницы с другого сайта, вы можете использовать тег <iframe>.

Ajax XmlHttpRequest объектом) не будет работать в междоменном домене (за исключением некоторых последних браузеров, что, вероятно, не подходит для вашего сайта, учитывая, что вы хотите, чтобы он работал для всех посетителей). .) Но вы можете использовать прокси на своем сервере, чтобы запрос Ajax выполнялся на вашем сайте (без междомена), и прокси-сервер выбирал страницу из другого домена и возвращал ее вызывающей стороне Ajax.

Этот прокси может быть сценарием, который вы пишете (например, какой-то простой скрипт PHP, который получает параметры и делает запрос, используя curl или любой другой эквивалент), или вы можете использовать, например, модуль apache proxy_http (всего пару строк конфигурации). , нет кода для написания, и гораздо лучше с точки зрения производительности)

Или, если вы не хотите использовать какой-либо вид прокси, вы можете динамически создать тег <script>, который не ограничивается доменом вашего сайта ...

0 голосов
/ 16 июля 2009

Вот пример

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

Надеюсь, этот пример будет вам полезен

0 голосов
/ 16 июля 2009

Использование Ajax .

...