stackoverflow是程序员赖以生存的工具之一。stackoverflow上技术问题答案的质量和准确率远高于其他平台。但是这么好的网站却不能正常使用(不能登录,不能评论,不能回答问题等等)因为谷歌的墙,实在是难受。以前还有VPN可以用,现在大部分VPN都被屏蔽了。.程序员的日子真的是越来越难过了。.所以我决定自己想办法解决这个头痛的问题。解决思路首先我们找到Stackoverflow无法正常使用的原因。我们打开stackoverflow网站,发现页面顶部有一行醒目的提示:StackOverflow需要来自其他域的外部JavaScript,被阻止或加载失败。翻译过来就是:StackOverflow需要使用其他域名下的一些JS文件,但是被阻止访问或者加载失败。由此,我们应该认为应该是加载某些JS文件的问题。打开浏览器控制台,发现控制台报了很多错误,如下图:我们发现第一个错误是获取https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min。js失败,因为谷歌被屏蔽,所以无法访问其域名下的js文件,而这次jquery获取失败导致了后续的一系列js错误。所以我们解决问题的关键就是让stackoverflow加载这个jquery文件。除了翻墙或者谷歌解封,否则我们无法从原地址获取到jquery文件,但是我又不想用vpn(因为我用不起),所以想知道能不能搞定从其他CDN获取相同版本的jquery文件并让它加载stackoverflow呢?这个是完全可以的,只要我们在stackoverflow网页加载过程中把googlejquery的script标签换成其他CDN的script标签就可以了。但是如何实现访问stackoverflow域名下的所有页面时自动替换呢?之前接触过一个叫TamperMonkey的Chrome插件。该工具允许用户创建js脚本并将其挂载到目标网页上,以达到修改网页样式和行为的目的。所以TamperMonkey应该可以达到我们替换脚本标签的目的。安装TamperMonkeyTamperMonkey为主流浏览器(Chrome、MicrosoftEdge、Safari、OperaNext、Firefox)提供插件,您可以选择自己喜欢的浏览器进行安装。让我们先为浏览器安装TamperMonkey插件。我用的是Chrome,但是因为Google被屏蔽了(可恶*),我们无法通过GoogleWebStore安装,只能从第三方下载,手动安装。TamperMonkey下载地址:微云下载下载完成后,打开Chrome的Extensions页面:将刚刚下载的.crx插件文件拖到Extensions窗口,点击AddExtension:TamperMonkey安装完成。下一步是编写一个脚本来替换原来的googlejquery参考。TamperMonkeyscript我们来看看google的jqueryreference在页面中是什么样子的:可以看到是一个普通的script标签。现在我们的思路应该更清晰了,就是用javascript进行DOM操作来代替原来的script标签。首先,我们打开TamperMonkey并创建一个新脚本。脚本内容如下://==UserScript==//@nameGoogleJsReplace//@namespacehttps://stackoverflow.com///@version0.1//@descriptiontrytotakeovertheworld!//@authorYou//@matchhttps://stackoverflow.com///@grantnone//==/UserScript==(function(){'usestrict';functioncreateScriptElement(file){varjsElm=document.createElement("script");jsElm.src=file;returnjsElm;}functionreplaceGoogleScripts(){varscripts=document.querySelectorAll('script');scripts.forEach(function(script){varmatches=script.src.match(/jquery\/([\d\.]+)\/jquery.min.js/);if(matches){varversion=matches[1];varnewSrc='https://cdn.bootcss.com/jquery/'+version+'/jquery.min.js';script.parentNode.replaceChild(createScriptElement(newSrc),script);console.log('replacedgooglejquerywith'+newSrc);}});}replaceGoogleScripts();})();脚本内容很简单,在页面中找到jquery的script标签,换成新的script标签,src为bootcsscdn的jquery地址(测试jQuery官方和微软CDN,访问速度没那么快asbootcss)添加脚本后,我们还需要对脚本的使用场景进行一些设置。首先,我们需要设置脚本运行的时间点。我们希望在google的jquery脚本刚添加到DOM的时候就替换掉,但是查阅了很多资料,发现这个是做不到的(如果有人知道怎么做,欢迎留言),所以我们只能选择尽早执行脚本,这样jquery就可以尽早加载。TamperMonkey提供了几个执行点,通过配置run-at来实现。我们选择最早的时间点document-start,如图配置:我们也希望这个脚本只对stackoverflow网站有效,可以使用@include或者@match来实现。我选择使用match,配置如图:至此,大功告成。我们打开stackoverflow.com,可以看到jquery已经下载成功,网页头部的红色提示信息已经消失,网站可以正常使用了。感谢您阅读。另外,我是来帮朋友推一个爱心众筹的。希望大家多多献爱心。我朋友的母亲患有直肠癌。目前在北京武警总医院接受治疗。您可以留言,留下您的联系方式。以后谢谢大家!
