作为一个前端开发人员,对浏览器的了解肯定要比普通用户更多,一般在页面上注入JS会在控制台进行,而地址栏其实也可以完成这个操作,甚至可以通过A标签的href属性来执行JS。
// 以下是一些点击无反应的A标签
<a href="javascript:void(0);">点击无反应</a>
<a href="javascript:;">点击无反应</a>
<a href="javascript:null;">点击无反应</a>
// 直接将href属性设为 "" 还是会跳转的
可以看出,点击A标签其实就是把href值放到地址栏去跳转了,这里以“javascript:”开头,跳转时就会执行后面的JS代码,类似于“http:”这样的URL Protocol协议。
注入代码执行失败:
虽然这看起来很方便,但是在实际使用时却会出现一个很严重的问题,那就是注入的JS代码过长时,会出错,首先确定代码没有写错,在控制台可以正常执行,只有在地址栏执行失败。
解决方法,那就是使用自调用函数把这些代码包起来,比如:
javascript:let a=b=c=10;for(let i=0;i<a;i++){b++;c--;console.log("a:"+a);console.log("b:"+b);console.log("c:"+c);};alert("JS代码执行完成");
// 给以上代码套上自调用函数,如下:
javascript:(()=>{let a=b=c=10;for(let i=0;i<a;i++){b++;c--;console.log("a:"+a);console.log("b:"+b);console.log("c:"+c);};alert("JS代码执行完成");})();
这样后者安全性要高得多,如果第一种写法(没有套自调用函数)报错,代码没有问题的话,给它加上一层自调用函数即可解决问题,既然如此何不养成一个套自调用函数的习惯呢。
这是个比较冷门的功能,有些时候又不得不用,因为被注入JS的页面可能是别人的,下面再提供一种玩法:
有广告的搜索结果
像这样,使用百度搜索时,左侧可能有我们需要的搜索结果,右侧几乎都是无用的推荐,或者毫无意义的广告,那么我们可以给浏览器新建一个书签(任意网页按Ctrl+D,然后再修改),这个书签的网址写上这样一段代码:
javascript:(()=>{document.querySelector("#content_right")?document.querySelector("#content_right").style.display="none":null;document.getElementById("rs")?document.querySelector("#rs").style.display="none":null;document.querySelector(".search_tool")?document.querySelector(".search_tool").style.display="none":null;let name=document.querySelector("#content_left")?document.querySelector("#content_left").innerHTML.split("class=\"")[1].split(" ")[0]:null;if(name!=null){for(let i=0;i<document.querySelectorAll("."+name).length; i++){if(document.querySelectorAll("."+name)[i].innerHTML.search("广告")!=-1){document.querySelectorAll("."+name)[i].style.display="none";}}}})();
注:360双核浏览器请切换为极速模式
注:如果直接把代码复制到地址栏,前面的"javascript:"会被浏览器删掉,需要手动输入
注:等页面加载完再点击执行,不然页面会重新加载广告
书签将网址设为代码这样就像是给浏览器加了一个清除广告的按钮,只需要轻轻一点就可以清除全部的广告,效果如下:
清除广告后的页面
网友评论