检查用户是否可以跨域访问外部资源

时间:2011-08-04 16:01:15

标签: jquery dns cross-domain client-side

我需要检查新注册的域是否已从用户浏览器完全注册/传播,因此我可以保证他们可以访问它。

我可以完全控制网站,并且需要检查目标域上是否存在与文本文件一样简单的内容,如果存在,我们就可以了。我可以编辑请求页面和目标资源。我猜这必须是某种jQuery ajax检查。

我无法在PHP中执行此操作,因为尽管我的服务器DNS已经提升,但最终用户可能没有。

3 个答案:

答案 0 :(得分:2)

您无法使用AJAX调用,因为它会被相同的原始策略阻止。

但你可以改用iframe:

<iframe id="check_1" src="http://www.wikipedia.com"></iframe>
<iframe id="check_2" src="http://www.aasdjflajsdflasdf.com"></iframe>

<script type="text/javascript">

  $(document).ready(function() {

    $('iframe#check_1').load(function() 
    {
        alert("check 1 succeeded!");
    });

    $('iframe#check_2').load(function() 
    {
        alert("check 2 succeeded!");
    });

  });

</script>

答案 1 :(得分:1)

假设你不介意在你的网站上抛出jQuery,这样的东西应该作为一个框架:

$.ajax('http://www.example.com/text.txt', {
    success: function(result) {
        alert('User has access');
    },
    error: function() {
        alert('User does not have status');
    }
});

而不是那些无用的alerts,你可以这样做:

success: function() {
    $.get('http://1.1.1.1/user-has-access.php?access=true');
},
error: function() {
    $.get('http://1.1.1.1/user-has-access.php?access=false');
}

答案 2 :(得分:0)

通过这个同一个原始政策经历了很多心痛。最后,最可靠/兼容的方法是在目标服务器上加载带有图像的<img>标记,并在jQuery中检查.load.error处理程序。问题是你需要设置img AFTER绑定错误处理程序的src。

<img id="check" width="1" height="1" />
<script type="text/javascript">
$(function() {
    $("#check").error(function(){
        // It failed
    }).attr('src', 'http://domain.com/px.gif');

    $('#check').load(function() {
        // It worked
    });
});
</script>