从另一个localhost站点引用一个localhost站点中的Js脚本

时间:2013-07-31 15:28:32

标签: javascript reference localhost jslint

我正在尝试设置自动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上禁用安全性就可以实现这一点。由于目标网站只是一个虚拟网站,并且正在本地使用,这对我来说效果更好。

2 个答案:

答案 0 :(得分:1)

这可能是由于same origin policy不允许ajax调用转到localhost。这可以通过在拨打电话之前更改以下设置来解决。

jQuery.support.cors = true

您可以通过将localhost更改为计算机的IP来解决此问题。

答案 1 :(得分:1)

JavaScript除非在调用域中特别列入白名单,否则无法执行跨域请求,因为您正在进行测试,因此您没有理由这么做。

如果您有某种版本设置(SVN,GIT)挂钩到Selenium并对存储库中的源代码运行测试。

您还可以将JSLint挂钩到预提交钩子中,该挂钩将拒绝任何非JSLinted的JS代码。