我正在尝试设置自动JSLint测试,这些测试将从目标网站获取js文件,然后使用Selenium对着将使用Js文件的url执行JSLint测试的测试站点运行它。
我在尝试使用两个不同的localhost网站进行本地测试时遇到了问题。
$(function () {
$.ajax({
url: "http://code.jquery.com/jquery-latest.min.js",
//url: "http://localhost:62338/Scripts/test.js", // url to other local site
dataType: "text"
}).done(function (data) {
var myResult = JSLINT(data);
..
});
});
如果我使用指向jquery url的url运行上面的代码,它可以正常工作,JSLint会分析这个文件。但是,如果我尝试将其指向我在其他localhost站点中的js文件,它就会破坏。如果我在Chrome中查看网络检查器,则表示已取消对脚本的调用。
为什么我无法以这种方式访问本地托管的js文件?
顺便说一句,我正在使用MVC4 Web项目。
编辑:我对Cors没有运气或指向我的IP,但Dominic的回答最终导致我question,我可以在Chrome上禁用安全性。我根本不喜欢这个选项,但它只是在我获得所有TeamCity设置之前进行本地测试,并且一旦Chrome重新启动,更改就会撤消。
Edit2 :此question的第二个答案对我来说也很有用,添加:
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
..到目标网站的web.config我无需在Chrome上禁用安全性就可以实现这一点。由于目标网站只是一个虚拟网站,并且正在本地使用,这对我来说效果更好。
答案 0 :(得分:1)
这可能是由于same origin policy不允许ajax调用转到localhost。这可以通过在拨打电话之前更改以下设置来解决。
jQuery.support.cors = true
您可以通过将localhost更改为计算机的IP来解决此问题。
答案 1 :(得分:1)
JavaScript除非在调用域中特别列入白名单,否则无法执行跨域请求,因为您正在进行测试,因此您没有理由这么做。
如果您有某种版本设置(SVN,GIT)挂钩到Selenium并对存储库中的源代码运行测试。
您还可以将JSLint挂钩到预提交钩子中,该挂钩将拒绝任何非JSLinted的JS代码。