2023年6月21日发(作者:)
探索浏览器页⾯关闭()的使⽤详解说起来(),这也是个“不太让⼈省⼼”的⾓⾊。因为浏览器兼容性千差万别,还对他有诸多限制。使⽤语法:()场景复现昨天发现有⼈在csdn上传违禁⽂件,举报后来到了这个页⾯:⾥⾯那个按钮发现点击⽆效!就。。。当时就挺尴尬的。不过既然它说是【关闭】,当时就想到了这个堪称“漏洞百出”的close事件,F12打开控制台⼀看:果不其然看到这顿时就来了兴趣探索过程和解决⽅案为什么就突然来了兴趣呢?⾸先,从这⾏代码中可以看出:这个页⾯不是通过
() “打开”的 —— MDN⽂档中有说明:不是通过()⽅法打开的窗⼝不能(直接)使⽤close进⾏关闭 (以前这条是针对Firefox的策略)显然,csdn这位⼯程师也看过⽂档,所以想⽤【在本页⾯打开空⽩页,然后再强⾏关闭】的“取巧”⽅法。但我不知道当时是怎么测试的,还是说后来浏览器⼜加的限制,这⾏代码在本⽂所写时显然在所有浏览器上都不能执⾏!现在让我通过语法解释⼀下上⾯的代码://摘⾃:MDNvar window = (url,windowName,[windowFeatures]);⽅法明确指出三个参数,第三个参数⼀般⽤于在“弹出框页⾯”处理长宽限制,和我们当前的问题没有关系,我们就不再考虑。MDN对url参数进⾏了说明,这个参数可以是个路径,可以是个页⾯/图⽚/其他浏览器⽀持类型的资源的地址, 如果参数1你写空串,会在指定的上下⽂环境中创建⼀个空页⾯我们看第⼆个参数windowName, 这个参数表⽰ 你要指定资源在哪个窗⼝打开 ,如果你指定的窗⼝不存在,浏览器会创建⼀个新的窗⼝,并把这个窗⼝的window对象命名为windowName(可以通过获取到),值得注意的是,这并不是这个窗⼝的【title】,当你在别处使⽤或
('', ‘_self') ⽅法 ,参数1置空 参数2写为_self 表⽰我们要在当前页⾯加载⼀个空;此时仿佛就是⼀个偷梁换柱的作⽤,通过加载进来⼀个空,将我们当前访问的页⾯变成()打开的页⾯这个时候 是不是就可以愉快地使⽤()⽅法并成功关闭当前页⾯了?可以!笔者可以确切的告诉你,这种⽅法在本地测试绝⼤多数浏览器上都可以正常使⽤!但偏偏在这⾥(本⽂开头所说实例)不⾏!还有⼀点是:如果你在a标签的 href 中⽤了javascript:xxx;写事件,那就千万记得不能再加属性target!就在我焦头烂额⾃我怀疑时,⼀师兄给我说了⼀个取巧的解决⽅案:about:blank也可以!但似乎这并不是最好的⽅法再回到上⾯的代码,我想了许久,莫不是 浏览器兼容性 的问题?为此,我判断了IE、Firefox、和其余浏览器(因为据说Firefox仍然在这个问题上表现地尤为激烈):// 兼容所有浏览器关闭页⾯⽅法function ClosePage(){
if (f("MSIE") > 0){ if (f("MSIE 6.0") > 0){ = null; (); } else { ('', '_top'); (); } } else if (f("Firefox") > 0) { = 'about:blank'; } else { = null; ('', '_self', ''); (); }}⽤这个⽅法,在各个浏览器上找⽹页试了⼀下,效果还不错。但…很多浏览器上会有和上⾯about:blank⼀样的效果。到这⾥我就纳闷了,到底是为什么?可能是浏览器对close的实现策略导致的。不过还没等我纳闷完,另⼀个消息就来了:这段代码放到⽂⾸的那个页⾯依然不⾏。。。(更新:在google和Firefox的⼀些⽹站如也不能⽤!)有点⼩懵,什么⿁?csdn这⾥究竟⽤了什么导致“close事件不能执⾏”?⼀些⼩建议和结尾这⼀点我不得⽽知。我后来分析了整个页⾯,做了代码复现,断点调试。。。依然没能发现问题出在哪⾥。不过我从⼀开始就觉得:这种⽅式——不论是“关闭页⾯”还是“打开⼀个空页⾯提⽰”,它的效果似乎都还不如“返回浏览器⾸页”好:let historyLen = ;(-historyLen+1)更新:这⾥其实是有问题的,因为⽤户如果“主动”触发浏览器上⾯的“返回上⼀页”的按钮,那么y的length值并不会改变,当你再执⾏()的时候就不会有响应了!(但是在本⽂场景下如果⽤户返回了上⼀页就不会有这个按钮了,此问题也就不存在)笔者还想到了er,它是⽤于获取+改变“从哪⾥跳转过来的”路径的API,但是很不幸,我发现了⼀个很神奇的事情:er=""时,相当于“本页⾯” —— 也就是说,它会把上⼀个页⾯也变为当前页⾯!这确实是很神奇的:因为go函数也实现了这个功能——相当于刷新当前页。或者“返回⽹站⾸页”?="xxx" rel="external nofollow"
这样还能再宣传⼀波,何乐⽽不为?到此这篇关于探索浏览器页⾯关闭()的使⽤详解的⽂章就介绍到这了,更多相关浏览器页⾯关闭()内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
2023年6月21日发(作者:)
探索浏览器页⾯关闭()的使⽤详解说起来(),这也是个“不太让⼈省⼼”的⾓⾊。因为浏览器兼容性千差万别,还对他有诸多限制。使⽤语法:()场景复现昨天发现有⼈在csdn上传违禁⽂件,举报后来到了这个页⾯:⾥⾯那个按钮发现点击⽆效!就。。。当时就挺尴尬的。不过既然它说是【关闭】,当时就想到了这个堪称“漏洞百出”的close事件,F12打开控制台⼀看:果不其然看到这顿时就来了兴趣探索过程和解决⽅案为什么就突然来了兴趣呢?⾸先,从这⾏代码中可以看出:这个页⾯不是通过
() “打开”的 —— MDN⽂档中有说明:不是通过()⽅法打开的窗⼝不能(直接)使⽤close进⾏关闭 (以前这条是针对Firefox的策略)显然,csdn这位⼯程师也看过⽂档,所以想⽤【在本页⾯打开空⽩页,然后再强⾏关闭】的“取巧”⽅法。但我不知道当时是怎么测试的,还是说后来浏览器⼜加的限制,这⾏代码在本⽂所写时显然在所有浏览器上都不能执⾏!现在让我通过语法解释⼀下上⾯的代码://摘⾃:MDNvar window = (url,windowName,[windowFeatures]);⽅法明确指出三个参数,第三个参数⼀般⽤于在“弹出框页⾯”处理长宽限制,和我们当前的问题没有关系,我们就不再考虑。MDN对url参数进⾏了说明,这个参数可以是个路径,可以是个页⾯/图⽚/其他浏览器⽀持类型的资源的地址, 如果参数1你写空串,会在指定的上下⽂环境中创建⼀个空页⾯我们看第⼆个参数windowName, 这个参数表⽰ 你要指定资源在哪个窗⼝打开 ,如果你指定的窗⼝不存在,浏览器会创建⼀个新的窗⼝,并把这个窗⼝的window对象命名为windowName(可以通过获取到),值得注意的是,这并不是这个窗⼝的【title】,当你在别处使⽤或
('', ‘_self') ⽅法 ,参数1置空 参数2写为_self 表⽰我们要在当前页⾯加载⼀个空;此时仿佛就是⼀个偷梁换柱的作⽤,通过加载进来⼀个空,将我们当前访问的页⾯变成()打开的页⾯这个时候 是不是就可以愉快地使⽤()⽅法并成功关闭当前页⾯了?可以!笔者可以确切的告诉你,这种⽅法在本地测试绝⼤多数浏览器上都可以正常使⽤!但偏偏在这⾥(本⽂开头所说实例)不⾏!还有⼀点是:如果你在a标签的 href 中⽤了javascript:xxx;写事件,那就千万记得不能再加属性target!就在我焦头烂额⾃我怀疑时,⼀师兄给我说了⼀个取巧的解决⽅案:about:blank也可以!但似乎这并不是最好的⽅法再回到上⾯的代码,我想了许久,莫不是 浏览器兼容性 的问题?为此,我判断了IE、Firefox、和其余浏览器(因为据说Firefox仍然在这个问题上表现地尤为激烈):// 兼容所有浏览器关闭页⾯⽅法function ClosePage(){
if (f("MSIE") > 0){ if (f("MSIE 6.0") > 0){ = null; (); } else { ('', '_top'); (); } } else if (f("Firefox") > 0) { = 'about:blank'; } else { = null; ('', '_self', ''); (); }}⽤这个⽅法,在各个浏览器上找⽹页试了⼀下,效果还不错。但…很多浏览器上会有和上⾯about:blank⼀样的效果。到这⾥我就纳闷了,到底是为什么?可能是浏览器对close的实现策略导致的。不过还没等我纳闷完,另⼀个消息就来了:这段代码放到⽂⾸的那个页⾯依然不⾏。。。(更新:在google和Firefox的⼀些⽹站如也不能⽤!)有点⼩懵,什么⿁?csdn这⾥究竟⽤了什么导致“close事件不能执⾏”?⼀些⼩建议和结尾这⼀点我不得⽽知。我后来分析了整个页⾯,做了代码复现,断点调试。。。依然没能发现问题出在哪⾥。不过我从⼀开始就觉得:这种⽅式——不论是“关闭页⾯”还是“打开⼀个空页⾯提⽰”,它的效果似乎都还不如“返回浏览器⾸页”好:let historyLen = ;(-historyLen+1)更新:这⾥其实是有问题的,因为⽤户如果“主动”触发浏览器上⾯的“返回上⼀页”的按钮,那么y的length值并不会改变,当你再执⾏()的时候就不会有响应了!(但是在本⽂场景下如果⽤户返回了上⼀页就不会有这个按钮了,此问题也就不存在)笔者还想到了er,它是⽤于获取+改变“从哪⾥跳转过来的”路径的API,但是很不幸,我发现了⼀个很神奇的事情:er=""时,相当于“本页⾯” —— 也就是说,它会把上⼀个页⾯也变为当前页⾯!这确实是很神奇的:因为go函数也实现了这个功能——相当于刷新当前页。或者“返回⽹站⾸页”?="xxx" rel="external nofollow"
这样还能再宣传⼀波,何乐⽽不为?到此这篇关于探索浏览器页⾯关闭()的使⽤详解的⽂章就介绍到这了,更多相关浏览器页⾯关闭()内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
发布评论