0

我正在尝试通过它们在维基百科中的前缀(en,fr,es,...)创建语言方向列表(从左到右或从右到左。维基百科中不存在其他方向)。为此,我编写了一个可以在此页面上执行的 JS 代码,并将数据存储在一个变量中。该代码打开每个 Wikipedia 的主页,并尝试根据其<html>元素的 'dir' 属性检查语言的方向。但是,由于每个 Wikipedia 都有不同的域,出于安全原因,浏览器不会让我访问这些数据。有没有这样的浏览器?是否可以更改我的偏好以启用它?

PS 代码:

var as = document.querySelectorAll('a.extiw'), pre, win, dirByPre = {};
for each (var a in as)
   if (pre = /^http:\/\/(\w+)\.wikipedia\.org\/wiki\/$/.exec(a.href)) {
      win = open(pre[0]);
      win.onload = function () {
         opener.dirByPre[pre[1]] = document.documentElement.dir;
         close();
      };
   }

非常感谢!

4

3 回答 3

0

这可能是一个奇怪的解决方案,但您可以编写一个浏览器扩展来允许您发出跨域请求。有一些简单的方法可以开发扩展,例如 Crossrider,它有一个X-Domain 插件,允许您通过 Javascript 发出跨域请求。

于 2012-08-21T23:12:54.693 回答
0

现代浏览器通常不允许这样做是有原因的。当允许任意 JavaScript 访问其他域时,存在许多安全问题。一个例子是XSS(跨站点脚本)

如果您不尝试在浏览器中运行脚本,那么您尝试做的事情会容易得多。Python、Ruby 或任何其他脚本语言确实可以使用单独的 HTTP 请求轻松完成此操作。如果您了解 JavaScript,那么Node.JS怎么样?

于 2012-08-21T23:07:51.477 回答
0

您遇到的是访问控制允许来源错误。阅读它,访问控制允许来源不允许

一般来说,如果你想访问另一个页面的数据以在 JS 中使用,你需要在你自己的服务器上这样做并将其传递给 Javascript。

但是,在这种情况下,最好的解决方案是通过其 API 访问 Wikipedia 并请求 JSONP 响应。请记住,维基百科是建立在 MediaWiki 之上的,因此请参阅其 API 文档http://www.mediawiki.org/wiki/API:Main_page

title = "List_of_Wikipedias"; 

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?", function(data) {
    console.log(data);
})

注意“format=json”和“callback=?”

这种 JSONP 方法适用于所有现代浏览器。

于 2012-08-21T23:17:15.290 回答