0

我正在尝试设置自动 JSLint 测试,该测试将从目标网站获取 js 文件,然后使用 Selenium 针对将使用 Js 文件的 url 执行 JSLint 测试的测试站点运行它。

我在尝试使用两个不同的本地主机网站进行本地测试时遇到问题。

 $(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 的回答最终让我想到了这个问题,我可以在其中禁用 Chrome 的安全性。我根本不喜欢这个选项,但它只是在我设置所有 TeamCity 东西之前在本地测试,并且一旦 Chrome 重新启动,更改就会撤消。

Edit2:这个问题的第二个答案也对我有用,添加:

<httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>

..到目标站点的 web.config 我能够让它工作而不必禁用 Chrome 上的安全性。由于目标站点只是一个虚拟站点并且正在本地使用,这对我来说效果更好。

4

2 回答 2

1

这可能是由于相同的源策略不允许 ajax 调用转到 localhost。这可以通过在拨打电话之前更改以下设置来解决。

jQuery.support.cors = true

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

于 2013-07-31T15:36:24.637 回答
1

JavaScript 不能执行跨域请求,除非特别将调用域列入白名单,因为您正在执行测试,所以没有理由要这样做。

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

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

于 2013-07-31T15:36:53.447 回答