优雅地解决stackoverflow.com js错误:Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.

优雅地解决stackoverflow.com js错误:Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load._第1张图片
Screen Shot 2016-05-20 at 6.48.28 PM.png

截图中,页面最上方的红条大家是不是很熟悉呐,来到这里的同学想必都深受其苦,我也是。常常是点开一个 stackoverflow 的链接,先去干点别的,过一分钟再来看,影响工作效率。这个 js 异常甚至影响到了部分功能的使用了,比如 comment 多的时候,show more comments 这个功能就使用不了。

搜罗了一圈的解决方案,要么限制了必须使用 firefox,虽然它是我第二喜欢的浏览器,以前也陪伴过我很长一段时间,但是为了这个问题而强行切换浏览器,我不愿意;要么就是依赖第三方的服务,担心安全隐患的问题,也不想采用。那么还有没有办法优雅地打开 stackoverflow 了啊?当然是有的。
*速查的同学可以直接跳到最后看操作总结

原因可能也都知道,简单说一下。 stackoverflow.com 的 jQuery 文件是引用了 ajax.googleapis.com,而 google 在本朝是众所周知的。在尝试加载 jQuery 这段时间里,stackoverflow.com 是展现不出来的,于是就造成“打开慢”的直观感受。

原因了解了,就好办了。不就是 jQuery 吗,不用劳烦google,我们本地提供就好。再通过修改hosts,把 ajax.googleapis.com 解析到本地服务器。嗯,理论上可行。Let's do it!

于是我们需要一个 http server。这选择就很多了。apache? nginx? 当然可以,但我们只是要放一个静态的 js 文件而已,不需用牛刀。还有更优雅的解决方案,那就是 python 的 SimpleHTTPServer。是的,只需要一行命令:

sudo python -m SimpleHTTPServer 80

sudo 是因为我们映射的是80端口,1024以下的端口需要 root 权限
python的安装略过不提,如果是 mac, 自带的就够用。
那么应该在哪里运行这个命令呢?验证了一下 SimpleHTTPServer 的根目录就是运行命令所在的目录,根据我们的需求,应该使这个目录结构和 ajax.googleapis.com 上的一致。
看一眼完整的路径

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

所以我们的目录结构组织成

/ajax/libs/jquery/1.7.1/jquery.min.js

jquery.min.js 的获取也略过,注意文件名要完全相同
当然 webroot 可以换成更有意义的名字比如 stackoverflow-jQuery。
打开浏览器测试一下

http://127.0.0.1/ajax/libs/jquery/1.7.1/jquery.min.js

嗯,看起来特别亲切。

还差最后一步,修改hosts。

vi /etc/hosts

最后添加一行

127.0.0.1 ajax.googleapis.com

!wq保存,妥啦。
赶紧试试访问 stackoverflow.com 吧!

操作步骤总结

1、组织好本地目录和文件,如下

/ajax/libs/jquery/1.7.1/jquery.min.js

2、打开终端,在目录中运行

sudo python -m SimpleHTTPServer 80

3、修改 hosts,增加一行

127.0.0.1 ajax.googleapis.com

THE END
本文提到的方法随着时间的推移环境的变化很有可能不再有效,但是当前(2016.5.3)是可行的。也作为一种探索记录和开阔思路。

国际惯例,转载注明来源:http://www.jianshu.com/p/40715dcac309

参考:
stackoverflow 打开缓慢,这个问题怎么破? (from 知乎)
Best lightweight web server (only static content) for windows [closed] (from stackoverflow)
不能绑定到端口号:80;原因:Permission denied (from csdn)

你可能感兴趣的:(优雅地解决stackoverflow.com js错误:Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.)