我正在尝试通过前缀(en,fr,es,...)创建一个语言列表(从左到右或从右到左。其他方向在维基百科中不存在)维基百科。为此,我编写了一个可以在this page上执行并将数据存储在变量中的JS代码。代码打开每个维基百科的主页,并尝试根据其<html>
元素的'dir'属性检查语言的方向。但是,由于每个Wikipedia都有不同的域,因此出于安全原因,浏览器不允许我访问此数据。有浏览器吗?是否可以更改我的首选项以启用它?
P.S。代码:
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();
};
}
非常感谢!
答案 0 :(得分:0)
有一个原因,在现代浏览器中通常不允许这样做。当允许任意JavaScript访问其他域时,存在许多安全问题。一个例子是XSS (cross-site scripting)。
如果您没有尝试在浏览器中运行 脚本,那么您尝试做的事情会容易得多。实际上,Python,Ruby或任何其他脚本语言都可以轻松使用单个HTTP请求。如果您了解JavaScript,Node.JS怎么样?
答案 1 :(得分:0)
这可能是一个奇怪的解决方案,但您可以编写一个浏览器扩展程序,允许您进行跨域请求。有很简单的方法来开发扩展程序,例如Crossrider,它有一个X-Domain addon,允许您通过Javascript发出跨域请求。
答案 2 :(得分:0)
您遇到的是访问控制允许来源错误。阅读它,Access Control Allow Origin not allowed by。
通常,如果要访问另一个页面的数据以便在JS中使用,则需要在自己的服务器上执行此操作并将其传递给Javascript。
但是,在这种情况下,最好的解决方案是通过其API访问Wikipedia并请求JSONP响应。请记住,Wikipedia是基于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方法适用于所有现代浏览器。