【问题标题】:Check if user is blocking 3rd party domain检查用户是否阻止了 3rd 方域
【发布时间】:2023-04-10 16:07:02
【问题描述】:

我遇到了一个问题,我们的很多支持电话都是关于我们的图像无法加载的,因为用户阻止了 amazon s3 或类似的第 3 方服务。我使用 3rd 方服务来托管图像、视频和一些 javascript。有没有办法通过 javascript 检测客户端是否阻止了域,以便我们显示消息而不是让用户联系支持?

$.ajax 'http://aws.amazon.com/s3/',
  type: 'GET',
  dataType: 'html'
  complete: (e, xhr, settings) ->
    if e.status == 200
      console.log "Not Blocking S3"
    else
      console.log "Blocking S3"

根据我尝试过的 cmets,它仍然无法正常工作。当我没有阻塞时,它会返回阻塞。

上面的示例咖啡脚本代码不起作用,因为我认为会发生安全错误,因为它在不同的域上执行 ajax。 Firebug 将请求显示为红色,但显示为 200。e.status 返回 0。

【问题讨论】:

  • 尝试使用 JavaScript 从该第三方加载资源,如果无法检索,请给出消息?
  • 我认为@DavidThomas 的意思是您应该使用 javascript 进行检测并将结果报告回您的网络服务器。
  • @jonnyGold:我确实做到了;澄清了原来的评论。 =)
  • 似乎不起作用。已编辑原始帖子。
  • This SO 答案也适用,它更适合我的目的。

标签: javascript jquery coffeescript client-side blocking


【解决方案1】:

从您要检查的域中加载图像。

<img id="checkImg" src="https://www.google.com/images/srpr/logo3w.pngAAA" />

​ 只是一个普通的图像标签(注意末尾的AAA 使其工作)。然后你可以检查图像的宽度,看看它是否加载。

if(document.getElementById('checkImg').clientWidth != 275)
    alert("Error")

Google 徽标的宽度为 275 像素,但错误图片(至少在 Chrome 中)只有 18 像素。所以如果图片不是 275px 宽,我知道它没有加载。

Demo

【讨论】:

  • +1 - 这样您就不会遇到在尝试加载外部资源的 Javascript 中遇到的跨域访问问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 2017-12-24
  • 1970-01-01
相关资源
最近更新 更多