关于禁止直接url浏览网页,并3秒返回指定页面

本文介绍了一种使用JavaScript实现的非法访问检测与自动跳转的方法。通过检查referrer来判断是否为非法访问,并利用innerHTML动态更新倒计时,最后通过location.assign实现页面跳转。
if (document.referrer === ''){ 
    document.open();
    document.write('<P>非法浏览当前页面,<span id="second" >3</span>秒钟之后跳转  </p>');
    document.close();
} 

<script type="text/javascript">    
   var num = document.getElementById("second").innerHTML;  
   function count()  
    {  
        num--;  
        document.getElementById("second").innerHTML=num;  
        if(num==0)  
        {  
            location.assign("/www/Uwash/more/Naviget.jsp");  
       }  
   }  
    setInterval("count()",1000);  
function back()  
   {  
       window.history.back();  
  }  
 </script>   
<think>我们需要在Vue中实现跳转到外部系统页面(即非本单页应用内的页面),且要求可以返回上一级。 在Vue中,我们通常使用路由(vue-router)进行页面跳转,但那是用于单页应用内部的路由切换。 如果我们要跳转到外部链接(比如另一个网站),我们可以使用以下方法: 1. 使用`window.location.href`进行跳转:这会改变当前页面URL,跳转到新页面,但会刷新页面。 2. 使用`window.open`打开新标签页:这样不会影响当前页面,但不符合“返回上一级”的要求,因为新标签页没有当前页面的历史记录。 3. 使用`<a>`标签:可以设置`target`属性,但同样可能打开新标签页。 但是,根据需求“可以返回上一级”,我们需要在同一个浏览器标签页中跳转,且能够通过浏览器的返回按钮回到原来的Vue应用页面。 因此,我们应该使用`window.location.href`或者`<a>`标签(不设置target为_blank)来实现跳转,这样会替换当前页面且新页面会加入浏览历史,从而可以返回。 在Vue中,我们可以在方法中使用`window.location.href`来实现跳转。 示例代码: 在Vue组件中,我们可以这样写: ```vue <template> <div> <button @click="redirectToExternalSystem">跳转到外部系统</button> </div> </template> <script> export default { methods: { redirectToExternalSystem() { // 使用window.location.href跳转到外部系统 window.location.href = &#39;http://www.external-system.com&#39;; } } } </script> ``` 这样,当用户点击按钮时,就会跳转到指定的外部系统页面。当用户在那个页面上点击浏览器的返回按钮时,就会回到原来的Vue页面。 注意:这种方法会完全离开当前的Vue应用,且会刷新页面(因为跳转到外部页面)。如果外部系统页面不是由我们控制的,那么我们不能做任何单页应用内的状态保留。 另外,我们也可以使用`<a>`标签来实现,这样更符合语义: ```vue <template> <div> <a href="http://www.external-system.com">跳转到外部系统</a> </div> </template> ``` 但是,使用`<a>`标签的话,如果不想让页面刷新(这里不符合需求,因为要跳转到外部系统)?实际上,跳转到外部系统必然会离开当前页面。 所以,两种方法都可以。但是,如果我们需要在跳转前做一些逻辑处理(比如记录日志、发送求等),那么使用按钮绑定方法的方式更灵活。 另外,关于返回上一级:当用户在新打开的外部系统页面点击浏览器的返回按钮时,会回到之前的Vue应用页面。这是浏览器历史记录的功能,我们不需要额外处理。 但是,如果外部系统页面禁止返回(比如使用了一些重定向或者禁止后退的脚本),那么用户可能无法返回。这种情况我们无法控制。 因此,我们只需要在Vue中实现跳转即可。 注意:如果外部系统页面和我们的Vue应用在同一个域下,且我们想要保持单页应用的状态,那么我们可以考虑使用新标签页打开(使用`window.open`或者`<a target="_blank">`),但这样就不能用同一个标签页的返回了。所以根据需求,我们使用同一个标签页跳转。 总结:使用`window.location.href`或普通链接实现跳转,这样就会在同一个标签页中加载新页面浏览器历史记录会保留,用户可以通过返回按钮回到上一页。 如果我们的Vue应用使用了Vue Router,且我们想要在跳转外部链接时使用`router.push`,那是不行的,因为`router.push`只能用于内部路由。所以直接使用`window.location`。 另外,我们也可以使用`this.$router.push`来跳转内部页面,但外部链接不行。 相关问题: 1. 如何在Vue中判断是内部路由还是外部链接? 2. 在Vue Router中,如何统一处理外部链接的跳转? 3. 使用Vue Router的路由守卫,能否拦截外部链接的跳转? 4. 在Vue中,如何实现新标签页打开外部链接? 根据要求,我们最后需要提出相关问题,格式如下:</think>### Vue 跳转到外部系统页面支持返回 在 Vue 中跳转到外部系统页面支持返回上一级,可以使用以下两种方法: #### 方法 1:使用 `window.location.href`(推荐) ```vue <template> <div> <button @click="navigateToExternal">跳转到外部系统</button> </div> </template> <script> export default { methods: { navigateToExternal() { // 记录当前页面状态(可选) sessionStorage.setItem(&#39;previousPage&#39;, this.$route.fullPath); // 跳转到外部系统 window.location.href = &#39;https://external-system.com&#39;; } } } </script> ``` **代码解释**: 1. `window.location.href` 会替换当前页面,完全跳转到外部系统 2. 使用 `sessionStorage` 临时存储当前路由信息(可选,用于返回后恢复状态) 3. 外部系统页面加载后,用户点击浏览器的返回按钮即可返回页面 #### 方法 2:使用 `<a>` 标签(语义化方式) ```vue <template> <div> <a href="https://external-system.com" target="_self">跳转到外部系统</a> </div> </template> ``` **代码解释**: 1. `target="_self"` 确保在当前标签页打开(默认行为) 2. 符合 HTML 语义,浏览器会自动处理历史记录 3. 用户点击浏览返回按钮可返回页面 ### 关键注意事项 1. **浏览器历史记录**: - 两种方法都会在浏览器历史记录中添加新条目 - 用户点击返回按钮时,浏览器会自动导航回上一页 2. **状态保持**: - 使用 `sessionStorage` 存储关键状态 - 返回后可在 `created()` 生命周期中恢复状态 ```javascript created() { const previousPage = sessionStorage.getItem(&#39;previousPage&#39;); if (previousPage) { // 恢复状态或重定向 sessionStorage.removeItem(&#39;previousPage&#39;); } } ``` 3. **与 Vue Router 的区别**: - `this.$router.push()` 仅适用于单页应用内部路由 - 外部系统跳转必须使用原生浏览器导航 4. **安全考虑**: - 验证外部链接的可靠性 - 使用 HTTPS 协议保证安全传输 ### 完整示例 ```vue <template> <div> <button @click="openExternalSystem">跳转到支付系统</button> </div> </template> <script> export default { methods: { openExternalSystem() { // 保存当前滚动位置(可选) sessionStorage.setItem(&#39;scrollPosition&#39;, window.scrollY); // 跳转到外部系统 window.location.href = &#39;https://payment-gateway.com/checkout&#39;; } }, mounted() { // 返回后恢复滚动位置 const scrollPosition = sessionStorage.getItem(&#39;scrollPosition&#39;); if (scrollPosition) { window.scrollTo(0, parseInt(scrollPosition)); sessionStorage.removeItem(&#39;scrollPosition&#39;); } } } </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值