【问题标题】:How can I load content from another site onto mine with JavaScript/jQuery?如何使用 JavaScript/jQuery 将其他网站的内容加载到我的网站上?
【发布时间】:2013-04-02 21:51:17
【问题描述】:

我正在尝试将维基百科文章加载到我的网站上。我正在尝试按照此处的说明进行操作:http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Transwiki 但我不知所措。

我试过了:

var xyz = document.getElementById(url("http://en.wikipedia.org/w/index.php?title=Special:Export&history=1&action=submit&pages=Albert_einstein")

var xyz = $('#xyz').load('http://en.wikipedia.org/w/index.php?title=Special:Export&history=1&action=submit&pages=Albert_einstein');

document.write(xyz);

【问题讨论】:

标签: jquery xml ajax json wikipedia


【解决方案1】:

您无法通过 JavaScript 从与您自己的域不同的域加载内容。 JS security policy 阻止它。

“在计算中,同源策略是许多浏览器端编程语言(例如 JavaScript)的重要安全概念。该策略允许脚本在源自同一站点的页面上运行 - 方案、主机名、和端口号[1 – 访问彼此的方法和属性,没有特定限制,但阻止跨不同站点的页面访问大多数方法和属性。[1]"
-- 维基百科,来自 W3C

Shazbot 建议使用 iframe,但不推荐使用 iframe。使用对象:

<div class="timeContainer" style="background:#333; color:#090; padding:10px 0;">
  <div style="text-align:center; width:100%;">Current Date and Time</div> <!-- Heading, replaceable with hx tag -->

<!--[if IE]>
 <object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="your.url/" style="width:100%; height:19px;">
  <p>backup content</p>
 </object>
<![endif]-->

<!--[if !IE]> <-->
 <object type="text/html" data="your.url/" style="width:100%; height:19px;">
  <p>backup content</p>
 </object>
<!--> <![endif]-->
</div> <!-- timeContainer -->

或者,您可以通过 PHP 使用 cURL(如果您的服务器支持)。我不确定 Python,但我认为 Python 也可以使用 cURL。

【讨论】:

  • 如果源支持jsonp - 那么这不是真的,你可以成功跨域传输数据,推荐iframe,因为它可以轻松显示另一个域的内容 - 他将如何使用在没有 jsonp 的情况下在其页面上显示 wikipedia 内容的对象??
  • @ScottSelby :请查看更新的答案,包括目标代码。
  • 另外,如果我的回答是错误的,那么维基百科和 W3C 都是错误的。
  • 我取消了投票,这并没有错,但是有一些常用的方法可以绕过这个限制,几乎每个当前的网站都有某种类型的社交媒体数据,这些数据来自交叉域请求
  • @ScottSelby:谢谢。直到你提到它,我才知道 JSONP。根据我在回答时所掌握的知识,我尽可能给出了完整的答案。
【解决方案2】:

如果您使用的是现代浏览器,您应该能够使用 CORS。根据 Wikipedia API 文档,您需要传递与浏览器发送的 Origin 标头匹配的附加 origin 参数。

http://en.wikipedia.org/w/api.php

"origin - 使用跨域访问 API 时 AJAX 请求 (CORS),将其设置为原始域。 这必须完全匹配 Origin: 标头中的来源之一,因此必须将其设置为类似 http://en.wikipedia.orghttps://meta.wikimedia.org 。 如果此参数与 Origin: 标头不匹配,将返回 403 响应。 如果此参数与 Origin: 标头匹配并且来源被列入白名单,则 Access-Control-Allow-Origin 标头 将被设置。”

【讨论】:

  • 好的,谢谢您的建议。我会通过这个tutorial 看看它会把我带到哪里。敬请期待:)
  • 你对 CORS 有什么好运吗,尤其是。你链接到的tut?
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 2019-04-18
  • 2014-12-11
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2013-09-18
相关资源
最近更新 更多