【问题标题】:How to prevent the client from blocking an external resource?如何防止客户端阻塞外部资源?
【发布时间】:2015-12-30 11:48:59
【问题描述】:

在我的网站上,我调用了两个 API,但 AdBlock 似乎阻止了其中之一。

//website cesare.io
$.get("http://ipinfo.io", function(response) {
    var l = "39.069100,-11.402732"; 
    $.get("http://api.wunderground.com/api/cbfb6c4b4b980e56/conditions/forecast/alert/q/"+ l +".json", function(response) {
        weather = response.forecast.simpleforecast.forecastday[0].conditions.toString();
        txt();
    });
}, "jsonp");

我发现启用“禁用跟踪”的用户收到上述错误。

如何防止 AdBlock 阻止 ipinfo.io API 的回调?

我能知道 AdBlock 禁用此 API 调用的原因吗?

【问题讨论】:

  • 你不能。用户可以完全控制浏览器。
  • @Barmar 所以唯一的解决方案是:1)要求用户禁用 AdBlock 2)只是不调用 API?
  • 您也可以从服务器脚本而不是浏览器调用 API。
  • 聪明。有什么方法可以知道 AdBlock 阻止网页中某些元素的原因吗?
  • 也许他们的网站上有一些解释

标签: jquery api


【解决方案1】:

作为一个快速而肮脏的修复尝试将此 http 标头添加到 http://ipinfo.io:

Access-Control-Allow-Origin: *

如果您使用 apache,请尝试将此行添加到您的 .htaccess:

Header add Access-Control-Allow-Origin "*"

如果你需要一个代理,你可以使用这个 php 脚本:

$url = "http://ipinfo.io/" . $_SERVER['REMOTE_ADDR'] . "/json";
echo file_get_contents($url);

【讨论】:

  • 谢谢。这必须转到我的 .htaccess 吗?
  • 您使用什么网络服务器?您可能可以通过它的配置添加它。如果您使用 apache,您也许可以在 .htaccess 中完成。如果您不介意性能,您可以(至少在您尝试解决方案是否适合您之前)制作一个简短的 php 脚本,发送该标题,然后将原始文件作为正文发送。
  • 谢谢。尴尬的是,我真的不知道。我刚刚从 Namecheap 获得了一个网络托管帐户。 +1 我现在要试试你的解决方案。
  • 好吧 ipinfo.io 已经有了 access-control-allow-origin: * 标头 :( 所以这不是你的问题,或者你使用的浏览器可能太旧了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2017-04-06
  • 1970-01-01
  • 2012-04-24
  • 2014-11-26
  • 1970-01-01
相关资源
最近更新 更多