跨域脚本:如何检索驻留在我们的另一个服务器上的新闻文章


Cross Domain Scripting: How can I retrieve news articles residing on our another server?

我一直在努力寻找这个问题的可靠答案,但还没有运气,所以最后我把问题贴在这里,希望能从极客那里找到可能的好答案。

案例学习:我有我所有的新闻文章(从数据库生成的页面)驻留在我的服务器之一。现在,我需要在另一个具有相同样式和脚本的服务器中获取这些新闻(让我们说div中的新闻)。

我已经试过了:

* proxy_page.php *

<?php 
$url = isset($_GET['url'])? $_GET['url'] : "";
if($url!=''){
    print file_get_contents($url);
}
?>

容器页面

$(document).ready(function(){
    $('#newsContainer').load('proxy_page.php?url=http://www.carefusion.co.uk/news/index.php?country=UK');
});
<div id="newsContainer"></div>

我的问题:

  • 请分享你的想法,并建议一些与你一起工作的东西实现这一目标。使用代理是解决这个问题的唯一方法吗有没有更好更可靠的答案?
  • (http://www.carefusion.co.uk/news/index.php?country=UK)我想访问这个页面上的样式数据。

注意:

我严格地不想使用iframes,所以这根本不是一个选项。

请分享你的想法,并建议一些与你一起实现这一目标的事情。

确定。

你选择的方式来自石器时代。
如今web开发人员有了更加文明的方法来检索远程数据,如XML(RSS)、SOAP、远程访问DB等。

请注意,使用当前的方法,"您的一个服务器"的管理员可以很容易地禁止您的脚本。

您要做的(通过更新和添加的代码示例判断)是使用JavaScript从另一个服务器获取内容。

但是,您将无法像浏览器加载一样获取页面。您将获取数据 -这意味着HTML。然后将它附加到DOM(到文档元素树),而不添加样式。为了从另一台服务器获取数据,您确实需要代理。还有新的Ajax, CORS -你可能想要了解它,如果你在服务器端设置了一个特殊的头,它将允许你从服务器取Ajax没有代理,所以如果你有控制服务器,这可能是一种方式。

你可以使用iframe并将其src属性设置为你想要的任何内容。这样你就可以保留你的样式:http://jsfiddle.net/D55ny/

乌利希期刊指南。我认为你对样式应用到页面的方式有错误的想法。当你用JavaScript获取内容时,你实际上是在向相同的页面添加新的标记

标记和样式是两个不同的东西,你不只是把它们放在一起(除非它是iframe,但你不想使用它)。

你可以获取内容(与选项中的任何一个,AJAX通过代理,CORS或JSONP),然后应用CSS通过抓取它也像这样(使用jQuery):

var link = $("<link>");
link.attr({
    rel: 'stylesheet'
  , href: 'path/to/your.css' // <-- change this to your path
});
$("head").append( link ); 

但是要注意父网站的样式将应用于新的标记。所以你需要用类封装你的演示,而不是使用类型选择器(如h1, p, li等),你可以阅读关于模块化封装CSS乔纳森·斯诺克的SMACSS书,看看这个演示的面向对象的CSS由妮可·沙利文或阅读有趣的方法是使用Yandex和处理相同的问题模块化和封装在这里(BEM)

UPD.2 对你的问题的简短回答是:你不能获取数据与AJAX, CORS或JSONP,并有CSS和JavaScript应用。这也是一段jQuery加载文档:

jQuery使用浏览器的.innerHTML属性来解析检索到的内容并将其插入到当前文档中。在这个过程中,浏览器通常会过滤文档中的元素,例如<html><title><head>元素。因此,通过.load()可能与检索文档时不完全相同直接通过浏览器。

你应该使用cURL来处理这个(get的站点内容)…收到响应字符串后,您应该解析它…但这可能非常困难。

相关文章: