小编典典

检查是否适用相同的原产地政策

ajax

在实际尝试使用ajax方法之前,是否存在“安全”的方法来检查同一原始策略是否适用于URL?这是我所拥有的:

function testSameOrigin(url) {

    var loc = window.location,
        a = document.createElement('a');

    a.href = url;

    return a.hostname == loc.hostname &&
           a.port == loc.port &&
           a.protocol == loc.protocol;
}

这种工作,但是基于Wikipedia文章,是一种手动猜测。有没有更好的方法来预先检查跨网域配额?jQuery可以使用。


阅读 228

收藏
2020-07-26

共1个答案

小编典典

有趣的问题!我四处搜寻,除了您发布的内容外,什么也找不到,但是当我弄乱一些测试代码时,我确实遇到了这一点。如果您只是想要一种简单的方法来测试URL而无需发出请求,那么我将按照您的方式进行操作。如果您不关心发出测试请求,则可以尝试以下操作:

对您想要的任何URL进行简单的Ajax请求:

var ajaxRequest = $.ajax({
  url: 'http://www.google.com',
  async: false
});

它返回一个jqXHR对象,然后可以检查:

ajaxRequest.isRejected(); // or...
ajaxRequest.isResolved();

现在,唯一的问题是,isRejected()将计算为true为每一个情况下无法载入网页(即404未找到,等),但你可以检查状态代码:

ajaxRequest.status;

看起来0当您尝试破坏相同的原始策略时,上面的行将返回,但是在其他情况下,它将返回适当的错误代码(即404)。

因此,总结起来,也许您可​​以尝试执行以下操作:

function testSameOrigin(testUrl) {

  var ajaxRequest = $.ajax({
    url: testUrl,
    async: false
  });

  return ajaxRequest.isRejected() && ajaxRequest.status === 0;
}

无论如何,这不是一个确定的答案,但我希望它能帮助您弄清楚您要寻找的东西!

2020-07-26