这个大坑就是:不要用windowhistorylength确定是否还能继续回退。
如果你访问了三个页面,然后又点回退按钮,退回来,退到第一个页面,请问,windowhistorylength此时是几?
是1?错!是3!这就是坑爹的地方,你无法根据windowhistorylength确定是否还能继续回退。
当然了,如果windowhistorylength是1,那么肯定是不能回退了,但是大于1,你就不敢说能不能继续回退。
那么,究竟怎样判断是否还能继续回退呢?
办法只能是:
随时记录当前页面URL,当执行了 historygo(-1) 之后,获得新的页面URL,然后跟从前记录的URL做对比,如果一致,说明没回退成功,那么就是回退到头了。
这个办法在非极端场合是够用的,如果某些时候服务器强制回退,或者前后URL一致但还真就不是一个页面,那么我这个方法就失效了。
所以,应仔细规范自己的项目,避免极端情况。
总结一下能够记住的问题。第一个是返回上个界面记住上次浏览的位置,第二个是滚动加载更多的分页吧。
嘛,遇见问题第一件事干嘛。百度啊,看思路啊。思想比较明确,尤其是vue,貌似生来就与vuex判定在一起了嘛。大概思路就是离开页面时保存位置,回到界面时利用滚动到那个位置就行了。网上的回答是这样的。
迫不及待试了一下。嗯,可是beforeRouteLeave函数不调用啊喂,这怎么办,又是一顿百度,无果,无奈改用beforeDestory函数,猜测原因可能是我写这个函数的组件是路由组件的子组件,待验证。
再试一下,感觉还是很奇怪啊,就是位置大概在超过一个屏幕高度后就不准了有木有,一顿consolelog调试。(目前只会这样调试。见笑了)发现离开时记录的位置根本不准确,嗯,记录方式大概就是vuex中设置一个position的state,离开的时候把windowscrollY保存进去。一顿各种测试,再次改变做法,不在组件钩子中记录,改在路由事件中记录历史位置,解决位置坐标记录不准的问题。(原因再次猜测:我写那个beforeDestory函数所在的组件里面有一个循环生成很多子组件,然后再调用beforeDestory时前面的子组件已经销毁,所以获取到的windowscrollY值不对且很小,技术不够,暂时找不到验证方法)
位置有了,剩下的就是返回时windowscrollTo到指定位置,发现依然存在问题,就是位置不准且滚动位置很奇怪。这个问题很好猜测,大概就是界面还没渲染出来就调用了windowscrollTo方法这样的,因为我在created钩子中写过获取获取的动作,所以滚动动作就加在数据成功后,遂解决。
嘛,其实做的时候遇见过还有一些问题,比如刚开始我的做法的vue-router中指定为history模式,并设置scrollBehavior函数,大概是这样
但是位置返回不准确,应该是我在created中获取数据后有刷新dom *** 作导致的。
一、JS高手呢,获取历史网址
你的问题涉及到 Same Origin Policy(同源策略),这是一个关系到隐私和安全性的问题。任何浏览器都不会给你机会让你访问 异域 历史网址。
但是,如果这三个页面在同一域名下,你可以使用 Javascript 的 documentcookie 来记录每次访问的网址。
我写的例子需要4个文件,url_historyjs,1,2,3(三个 文件内容相同),代码写在空间(hibaidu/keneks/item/50699e21f9300d0c72863e4d)
复制粘贴,将 url_historyjs 和其它三个 文件放在一起,访问任何一个页面,点击任何链接,上面会自动显示曾经访问过的页面。
历史网址以 array 形式保存在 url_history 变量中,所以 url_history[0] 为上一个,url_history[1] 为上上一个,以此类推。
二、js中历史网页中怎么把上一个页面换成另一个页面
js是没有更改浏览历史url和获取从上一页开的url地址的,您可以使用windowlocationreplace(url);来重置浏览历史,
windowlocationreplace不在浏览器中保存跳转前的网址,因此按返回键将无效;
例子:
有 3个jsp页面(1jsp, 2jsp, 3jsp),进系统默认的是1jsp ,当我进入2jsp的时候, 2jsp里面用windowlocationreplace("3jsp");与用windowlocationhref("3jsp");从用户界面来看是没有什么区别的,但是当3jsp页面有一个“返回”按钮,调用 windowhistorygo(-1);wondowhistoryback();方法的时候,一点这个返回按钮就要返回2jsp页面的话,区别就出来了,当用windowlocationreplace("3jsp");连到3jsp页面的话,3jsp页面中的调用 windowhistorygo(-1);wondowhistoryback();方法是不好用的,会返回到1jsp 。当用windowlocationhref("3jsp");连到3jsp页面的话,3jsp页面中的调用 windowhistorygo(-1);wondowhistoryback();方法是好用的,会返回2jsp。因为windowlocationreplace("3jsp");是 不向服务器发送请求的跳转,而windowhistorygo(-1);wondowhistoryback(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以会跳到系统默认页面1jsp 。windowlocationhref("3jsp");是向服务 器发送请求的跳转,windowhistorygo(-1);wondowhistoryback(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以就可以返回到2jsp。
三、JS或jQuery,清除网页历史记录在展示历史记录的页面添加如下js 。
一、JS高手呢,获取历史网址
你的问题涉及到 Same Origin Policy(同源策略),这是一个关系到隐私和安全性的问题。任何浏览器都不会给你机会让你访问 异域 历史网址。
但是,如果这三个页面在同一域名下,你可以使用 Javascript 的 documentcookie 来记录每次访问的网址。
我写的例子需要4个文件,url_historyjs,1,2,3(三个 文件内容相同),代码写在空间(hibaidu/keneks/item/50699e21f9300d0c72863e4d)
复制粘贴,将 url_historyjs 和其它三个 文件放在一起,访问任何一个页面,点击任何链接,上面会自动显示曾经访问过的页面。
历史网址以 array 形式保存在 url_history 变量中,所以 url_history[0] 为上一个,url_history[1] 为上上一个,以此类推。
二、js如何获取前两页的url
<script> var backurl=documentreferrer; alert(backurl);</script>;但是有的浏览器不支持的,如果是同个域名下通过此方式跳转的,那么我们可以通过访问windowwopener对象去获取丢失的referrer信息。
代码如下:<script type=text/javascript> var referrer = documentreferrer; if (!referrer) { try { if (windowopener) { // IE下如果跨域则抛出权限异常 // Safari和Chrome下windowopenerlocation没有任何属性 referrer = windowopenerlocationhref; } } catch (e) {} }</script>;你的q号,我一会远程助你。
三、如何使用js获取修改URL使用js对当前的URL进行 *** 作,可以使用内置对象windowlocation;windowlocation有以下属性:windowlocationhref:取得当前地址栏中的完整URL,可以通过赋值改变当前地址栏中的URL;windowlocationsearch 取得当前URL的参数部分,即“?”后面的部分(包括问号),可以通过赋值改变URL的参数部分;windowlocationhash:取得当前URL中包含的锚记,即“#”后面的部分(包括#),可以通过赋值改变URL的锚记部分;windowlocationhost:取得当前URL中的主机信息,包括端口号,可以通过赋值改变主机信息;windowlocationhostname:取得当前URL中的域名部分,不包括端口号,可以通过赋值改变域名;windowlocationport:取得当前URL中的端口号,可以通过赋值改变端口号;windowlocationpathname:取得当前URL中的路径信息,即域名与参数之间的部分,可以通过赋值改变当前URL的路径;windowlocationprotocol:取得当前URL的协议部分,比如:,:等,可以通过赋值改变URL的协议部分;windowlocation有一下方法:windowlocationreplace(url):用传入的URL字符串替代当前的URL,该方法会将历史记录中的URL一并替换掉,也就是说,这个方法会覆盖之前的历史记录;windowlocationreload():重新加载当前URL,相当于刷新;windowlocationassign(url):加载传入的URL,该方法不会覆盖之前的历史记录;。
四、JS获取几种URL地址的方法下面为使用JS获取MAC地址、IP地址及主机名的方法:复制代码代码如下:<meta -equiv="Content-Type" content="text/; charset=gbk"><body> 。
五、js中如何获取前一个页面的url获取的方法如下:
1、设置或获取整个 URL 为字符串: windowlocationhref
2、设置或获取与 URL 关联的端口号码: windowlocationport
3、设置或获取 URL 的协议部分 windowlocationprotocol
4、设置或获取 href 属性中跟在问号后面的部分 windowlocationsearch
5、获取变量的值(截取等号后面的部分)
6、设置或获取 URL 的协议部分: windowlocationprotocol
7、设置或获取 href 属性中在井号“#”后面的分段: windowlocationhash
8、设置或获取 location 或 URL 的 hostname 和 port 号码: windowlocationhost
六、如何使用js获取修改URL使用js对当前的URL进行 *** 作,可以使用内置对象windowlocation;
windowlocation有以下属性:
windowlocationhref:取得当前地址栏中的完整URL,可以通过赋值改变当前地址栏中的URL;
windowlocationsearch 取得当前URL的参数部分,即“?”后面的部分(包括问号),可以通过赋值改变URL的参数部分;
windowlocationhash:取得当前URL中包含的锚记,即“#”后面的部分(包括#),可以通过赋值改变URL的锚记部分;
windowlocationhost:取得当前URL中的主机信息,包括端口号,可以通过赋值改变主机信息;
windowlocationhostname:取得当前URL中的域名部分,不包括端口号,可以通过赋值改变域名;
windowlocationport:取得当前URL中的端口号,可以通过赋值改变端口号;
windowlocationpathname:取得当前URL中的路径信息,即域名与参数之间的部分,可以通过赋值改变当前URL的路径;
windowlocationprotocol:取得当前URL的协议部分,比如:,:等,可以通过赋值改变URL的协议部分;
windowlocation有一下方法:
windowlocationreplace(url):用传入的URL字符串替代当前的URL,该方法会将历史记录中的URL一并替换掉,也就是说,这个方法会覆盖之前的历史记录;
windowlocationreload():重新加载当前URL,相当于刷新;
windowlocationassign(url):加载传入的URL,该方法不会覆盖之前的历史记录;
1js中历史网页中怎么把上一个页面换成另一个页面
js是没有更改浏览历史url和获取从上一页开的url地址的,您可以使用windowlocationreplace(url);来重置浏览历史,
windowlocationreplace不在浏览器中保存跳转前的网址,因此按返回键将无效;
例子:
有 3个jsp页面(1jsp, 2jsp, 3jsp),进系统默认的是1jsp ,当我进入2jsp的时候, 2jsp里面用windowlocationreplace("3jsp");与用windowlocationhref("3jsp");从用户界面来看是没有什么区别的,但是当3jsp页面有一个“返回”按钮,调用 windowhistorygo(-1);wondowhistoryback();方法的时候,一点这个返回按钮就要返回2jsp页面的话,区别就出来了,当用windowlocationreplace("3jsp");连到3jsp页面的话,3jsp页面中的调用 windowhistorygo(-1);wondowhistoryback();方法是不好用的,会返回到1jsp 。当用windowlocationhref("3jsp");连到3jsp页面的话,3jsp页面中的调用 windowhistorygo(-1);wondowhistoryback();方法是好用的,会返回2jsp。因为windowlocationreplace("3jsp");是 不向服务器发送请求的跳转,而windowhistorygo(-1);wondowhistoryback(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以会跳到系统默认页面1jsp 。windowlocationhref("3jsp");是向服务 器发送请求的跳转,windowhistorygo(-1);wondowhistoryback(); 方法是根据服务器记录的请求决定该跳到哪个页面的,所以就可以返回到2jsp。
2javascript怎么设置historyhistory -- history用于窗体中的导航
history,中文"历史"
history对象是window对象的属性
浏览者通常可以使用浏览器的前进与后退按钮访问曾经浏览过的页面。JavaScript的history对象记录了用户曾经浏览过的页面,并可以实现浏览器前进与后退相似的导航功能
可以通过back函数后退一个页面,forward函数前进一个页面,或者使用go函数任意后退或前进页面,还可以通过length属性查看history对象中存储的页面数
history对象函数
JavaScript historygo() 函数
说明:前进或后退指定的页面数
JavaScript historyback() 函数
说明:后退一页
JavaScript historyforward() 函数
说明:前进一页
history对象属性
JavaScript length 属性 --history对象中缓存了多少个URL
示例
historylength;
3如何修改浏览器的JavaScript选项在IE8里(不知IE6或IE7是否一样,不过大体上是差不多的)1进入“Inter选项”如果不知道怎么进入,打开IE,按住键盘的“Alt”键(就在空格键的旁边)然后会看到“地址栏”的上面或下面会出现一个菜单栏,里面有:文件、编辑、查看等选项。
单击“工具”那里,然后在d出来的下拉菜单里,单击“Inter选项”2进入“Inter选项”后,会看到一个大框,注意看最上面,会发现这样几个选项卡:常规、安全、隐私、内容。单击“安全”,会看到,下方的内容改变了3通过刚才那步进入了“安全”选项卡之后,先确保是“Inter”这一项被选中(就是那个“地球”),然后把注意力转到下方。
在最下面,有三个按钮:确定、取消和应用。在它们上面,可以找到一个名叫:“自定义级别”的按钮,单击它。
4又一个框d出来了,可以看到有一堆设置。把竖着的那个滚动条慢慢往下拽,直到找到“脚本”这一选项,它的位置应该是在中间偏上,在ActiveX选项的下面。
(这一步要有点耐心,未必能一下就找到的)5再把滚动条稍微往下拽一点,看到有一项叫做:“活动脚本”。它下面有一个单选框,有这样三种选择:禁用、启用、提示。
单击“启用”。然后点整个框框最下面的“确定”。
然后再点“Inter选项”框的“确定”。应该就OK了如果还有哪里说的不太明白,您就在问题补充里再提出来吧,如果满意的话,要给分哦,谢谢您了。
4如何用JS实现修改浏览器地址有两种方法
1把悄悄的跳转写到a页面,b页面d出后a页面马上跳转到c页面。
a页面代码:
<a href="#" onclick="opennew">a页面的超链接</a>
<script type=text/JavaScript>
function opennew{
windowopen('" target="_blank" >a页面的超链接</a>
b页面代码:
<script type=text/JavaScript>
function opennew{
windowopenerlocation='';//a页面跳到谷歌
}
</script>
<body onl oad="opennew">
这样是在b页面加载完毕后执行opennew()方法,使a页面跳转。你可以在b页面其他地方触发事件,调用opennew()方法
</body>
history是你浏览过的网页的url(简单的说就是网址)的集合,也就是你的浏览器里的那个历史记录。它在js里是一个内置对象,就跟document一样,它有自己的方法,go就是其中一个。
这个方法的参数是一个数字,它指定要定位的url相对当前页面url位置的下标。当前的url下标为0,所以windowhistorygo(-1)就是要定位到相对当前页面下标为-1的页面,也就是之前刚刚访问的页面。
再举个例子:
你在地址栏访问百度页面(>
用firebug看了下,遍历应该是可以的你可以用
for
(var
i
in
obj){
n++;
}
alert(n);看一下,应该都遍历了,但是
window对象
报错错在sessionStorage这个属性上面,document错在domConfig这个属性上面,这2个属性的toString方法可能不能用,
以上就是关于window.history.length的大坑全部的内容,包括:window.history.length的大坑、关于浏览器返回上个界面时回到上到浏览的位置、js查页面历史等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)