当前位置: 首页 > 面试题库 >

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

邓夕
2023-03-14
问题内容

在实际尝试使用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可以使用。


问题答案:

有趣的问题!我四处搜寻,除了您发布的内容外,什么也找不到,但是当我弄乱一些测试代码时,我确实遇到了这一点。如果您只是想要一种简单的方法来测试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;
}

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



 类似资料:
  • 问题内容: 同一原产地政策 我想制作有关HTML / JS 同源策略的社区Wiki,以希望能帮助任何人搜索此主题。这是关于SO的最热门搜索主题之一,并且没有统一的Wiki,所以我在这里:) 相同的来源策略可防止从一个来源加载的文档或脚本从另一个来源获取或设置文档的属性。该策略可以追溯到Netscape Navigator 2.0。 您采用哪种最喜欢的方式处理同源政策? 请保持详细示例,并最好也链接

  • 假设我有一组数组,包括和,我想检查它们是否相等。一般来说,我可以只使用(除了一些我现在忽略的愚蠢的情况)。 但是,这会计算的整个数组,这通常是不需要的。我的数组非常大,而且我有很多数组,两个数组相等的概率很小,所以很可能,在函数返回False之前,我只需要计算的一小部分,所以这对我来说不是一个最佳解决方案。 我尝试使用内置的函数,并结合: 然而,在两个数组相等的情况下,这似乎要慢得多,总的来说,它

  • 问题内容: 在一个初级Oracle开发人员职位的面试中有人问我这个问题,面试官承认这是一个艰难的过程: 编写查询以检查表’employees_hist’是否与表’employees’完全相同。任何想法如何去做? 编辑:考虑到表可以有重复的记录,因此在这种情况下,简单的MINUS将不起作用。 例子 这两个是不一样的。 问题答案: 解决重复项的一种可能的解决方案是创建一个子查询,该子查询对两个表执行U

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 我想比较两个数组,看看它们是否有相同的值。 如果我有一个数组,名为 以及如何将坐标放入“coords”变量(哦,等等,它被称为“ship”,而不是coords。我忘了): //arr.add(new javax.vecmath.vector3f(float.parsefloat(x),float.parsefloat(y),float.parsefloat(z));}谢谢!