【问题标题】:Check if user can access an external resource cross-domain检查用户是否可以跨域访问外部资源
【发布时间】:2011-10-20 03:45:27
【问题描述】:

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

我对网站有完全的控制权,需要检查目标域上是否存在像文本文件这样简单的东西,如果存在,我们就可以开始了。我可以编辑请求页面和目标资源。我猜这必须是某种 jQuery ajax 检查。

我无法在 PHP 中执行此操作,因为虽然我的服务器 DNS 已经传播,但最终用户可能没有。

【问题讨论】:

    标签: jquery dns cross-domain client-side


    【解决方案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】:

      您不能为此使用 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>
      

      【讨论】:

      • 他可以完全控制网站,因此他可以添加 Access-Control-Request-Headers
      • 这不是 100% 的工作,可能与加载顺序有关?
      【解决方案3】:

      为这个同源政策经历了很多心痛。最后,最可靠/兼容的方法是在目标服务器上加载带有图像的&lt;img&gt; 标记,并检查jQuery 中的.load.error 处理程序。问题是您需要在绑定错误处理程序之后设置 img 的 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>
      

      【讨论】:

        猜你喜欢
        • 2016-03-03
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 2020-06-01
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        相关资源
        最近更新 更多