a href="#" onclick=""使用技巧

本文介绍了一种使用JavaScript处理伪链接的方法,通过设置返回false来防止点击时滚动条上移的问题。提供了两种实现方式,帮助开发者更好地进行网页交互设计。
使用javascript的时候,通常我们会通过类似:<a href="#" onclick="javascript:方法">提交</a>的方式,通过一个伪链接来调用javascript方法.这种方法有一个问题是:虽然点击该链接的时候不会跳转页面.但是滚动条会往上滚,解决的办法是返回一个false.如下所示:<a href="#" onclick="javascript:方法;return false;">提交</a>;或者还有一个方法是 #this <a href="#this" onclick="javascript:方法">
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>单页应用示例</title> <link rel="stylesheet" href="../CSS/index.css"> </head> <body> <div class="content"> <!-- 导航栏 --> <nav class="navbar"> <ul> <li> <div class="search-container"> <input class="search-input" type="text" name="" placeholder="搜索..."> <button class="search-button" value="搜索"> <img src="../Image/搜索.png" alt="搜索"> </button> </div> </li> <li><a href="#" class="nav-link active" data-target="home">首页</a></li> <li><a href="#" class="nav-link" data-target="">山河</a></li> <li><a href="#" class="nav-link" data-target="">景致</a></li> <li><a href="#" class="nav-link" data-target="">独韵</a></li> <li><a href="#" class="nav-link" data-target="">文脉</a></li> <li><a href="#" class="nav-link" data-target="">远图</a></li> <li><a href="#" class="nav-link" data-target="">业兴</a></li> <li><a href="#" class="nav-link" data-target="">民安</a></li> <li><a href="#" class="nav-link" id="right" data-target="register">注册</a></li> </ul> </nav> <!-- 轮播图 --> <video src="" id="myVideo"> <source src="../Video/云海.mp4" type="video/mp4"> </video> <div class="content"> <div id="silder"> <ul id="list"> <li><img src="../Image/丹江.png"></li> <li><img src="../Image/丹江.png"></li> <li><img src="../Image/白河.png"></li> <li><img src="../Image/桐柏山脉.png"></li> <li><img src="../Image/唐河.png"></li> <li><img src="../Image/丹江.png"></li><!-- 把第一张图片放在最后 --> </ul> </div> </div> </div> <!-- 内容区域 --> <div class="content-container"> <!-- 首页内容 --> <section id="home" class="content-section active"> <h1>欢迎来到首页</h1> <p>这是首页内容,请点击上方导航切换页面</p> <div class="features"> <div class="feature-card">特色功能 1</div> <div class="feature-card">特色功能 2</div> <div class="feature-card">特色功能 3</div> </div> </section> <!-- 注册页内容 --> <section id="register" class="content-section"> <h2>用户注册</h2> <form id="registration-form"> <div class="form-group"> <label for="username">用户名:</label> <input type="text" id="username" required> </div> <div class="form-group"> <label for="email">邮箱:</label> <input type="email" id="email" required> </div> <div class="form-group"> <label for="password">密码:</label> <input type="password" id="password" required> </div> <button type="submit">注册</button> </form> </section> </div> <script src="../JS/index.js"></script> </body> </html> js和css已经按照上文设置为什么没有出现背景视频
最新发布
12-02
<think> 我们被要求解释JavaScript中`location.href = document.referrer`的含义和使用。 根据提供的引用,我们可以总结如下: 1. `document.referrer`:获取当前页面的来源页面的URL(即用户是从哪个页面跳转过来的)。它相当于PHP中的`$_SERVER[&#39;HTTP_REFERER&#39;]`,但需要注意拼写是`referrer`(两个r)[^2]。 2. `location.href`:获取或设置当前页面的完整URL。当给`location.href`赋值时,浏览器会导航到该URL。 3. `location.href = document.referrer`:这行代码的作用是让浏览器跳转到来源页面(即上一页)。它实际上是执行了一次“返回”操作,但注意,这并不等同于浏览器的后退按钮(因为后退按钮是浏览历史的上一条记录,而这里直接指定了目标URL)。 使用场景: - 常见的场景是“返回”按钮的功能。当用户点击一个返回按钮时,我们可以用这行代码将用户带回到上一页面。 - 但是,需要注意`document.referrer`存在一些兼容性和使用限制: - 在Safari中,如果用户是通过右键菜单打开链接,则`document.referrer`可能为空[^4]。 - 在IE中,通过`window.open`或修改`location.href`跳转可能会丢失referrer(但IE9使用`location.href`跳转不会丢失)[^4]。 - 使用meta跳转时,IE和Firefox下会丢失referrer[^4]。 - 另外,如果用户直接在地址栏输入地址或通过书签访问,则`document.referrer`为空字符串。 因此,在实际使用中,我们需要考虑这些情况,并做好兼容性处理。例如,如果`document.referrer`为空,可能要跳转到默认页面或使用`history.back()`。 另外,引用[1]和[3]中提到了一些技巧: - 引用[1]:在跳转时拼接参数(避免缓存)时,需要判断来源URL是否已有参数,从而决定使用`?`还是`&`。 - 引用[3]:在IE中,为了保留referrer,使用了一个技巧:创建一个`<a>`标签并模拟点击,这样在跳转后,目标页面依然可以获取到referrer。 因此,我们可以这样总结: ### 含义 `location.href = document.referrer` 表示将当前页面的地址设置为来源页面的地址,从而让浏览器跳转回来源页面。 ### 使用场景 1. 实现返回上一页的功能。 2. 在需要返回到来源页面的场景,如表单提交后返回等。 ### 注意事项 1. `document.referrer`可能为空(如直接访问、书签、某些浏览器的特殊情况等),因此在使用前应检查: ```javascript if (document.referrer) { location.href = document.referrer; } else { // 没有来源页面,可以跳转到默认页面或使用history.back() history.back(); } ``` 2. 为了确保跳转后的页面不被缓存(例如,在返回时希望看到更新),可以在URL后添加随机参数(引用[1]): ```javascript if (document.referrer) { var connector = document.referrer.indexOf(&#39;?&#39;) > -1 ? &#39;&&#39; : &#39;?&#39;; location.href = document.referrer + connector + &#39;r=&#39; + Math.random(); } ``` 3. 对于IE的兼容性问题,特别是需要保留referrer的情况,可以使用引用[3]中的方法(通过创建a标签并模拟点击)来跳转。 ### 示例代码 下面是一个实现返回上一页并避免缓存的函数(考虑了来源为空的情况): ```javascript function goBackWithCacheBuster() { if (document.referrer) { var connector = document.referrer.indexOf(&#39;?&#39;) > -1 ? &#39;&&#39; : &#39;?&#39;; // 添加随机参数防止缓存 location.href = document.referrer + connector + &#39;nocache=&#39; + Math.random(); } else { // 如果没有来源,则使用history.back()返回,如果历史记录为空,则跳转到首页 if (history.length > 1) { history.back(); } else { location.href = &#39;/&#39;; // 跳转到首页或其他默认页面 } } } ``` ### 总结 `location.href = document.referrer`是一种常用的返回上一页的方法,但由于浏览器的兼容性和`document.referrer`的局限性,实际使用中需要谨慎处理。建议在跳转前检查`document.referrer`是否存在,并考虑添加缓存破坏参数。在需要保留referrer的场景(如目标页面需要知道来源),可以采用创建a标签模拟点击的方法来跳转(特别是在IE中)[^3]。 §§相关问题§§ 1. 如何解决`document.referrer`在Safari或IE中为空的问题? 2. 除了`document.referrer`,还有哪些方法可以实现返回上一页的功能? 3. 如何防止浏览器缓存页面,导致返回时看不到更新? 4. 在哪些场景下使用`location.href = document.referrer`可能不安全? </think> ### `location.href = document.referrer` 的含义与作用 #### 1. **核心含义** 该代码表示 **将浏览器重定向到当前页面的来源页面(即上一页)**。 - `document.referrer`:获取当前页的来源 URL(即用户是从哪个页面跳转过来的)[^2][^4]。 - `location.href`:设置或获取当前页面的完整 URL,赋值时会触发页面跳转[^2][^5]。 组合后的效果是 **强制返回上一页**。 #### 2. **典型使用场景** - **“返回”按钮功能**: 用户点击后退按钮时,直接跳转至来源页面。 ```javascript document.getElementById("backBtn").onclick = function() { location.href = document.referrer; }; ``` - **表单提交后的跳转**: 提交表单后自动返回来源页(如商品详情页提交后返回列表页)。 - **防盗链处理**: 验证图片来源是否合法,非法则用 `location.href` 重定向至来源站[^2]。 --- ### 关键注意事项与兼容性问题 #### 1. **`document.referrer` 的可靠性** - **可能为空的情况**: - 用户直接输入地址访问(无来源页)。 - 浏览器隐私模式。 - 使用 `meta` 标签跳转(IE/Firefox 会丢失 referrer)[^4]。 - Safari 中右键打开链接[^4]。 **安全代码示例**: ```javascript if (document.referrer) { location.href = document.referrer; // 有来源页时跳转 } else { history.back(); // 无来源页时用历史记录后退 } ``` #### 2. **参数拼接问题** 向来源页添加参数时需检查 URL 是否已包含 `?`: ```javascript if (document.referrer.includes(&#39;?&#39;)) { location.href = document.referrer + "&nocache=" + Math.random(); } else { location.href = document.referrer + "?nocache=" + Math.random(); } // 添加随机参数防止缓存 [^1] ``` #### 3. **浏览器兼容性** - **IE 特殊处理**: IE 下直接修改 `location.href` 可能丢失 referrer。需用 `<a>` 标签模拟点击[^3]: ```javascript if (isIE) { const link = document.createElement(&#39;a&#39;); link.href = document.referrer; document.body.appendChild(link); link.click(); // IE 保留 referrer 的写法 } ``` - **拼写错误**: `referrer` 易错写成 `referer`(正确拼写带两个 `r`)[^2]。 --- ### 与类似技术的对比 | **方法** | **特点** | |------------------------|--------------------------------------------------------------------------| | `history.back()` | 基于浏览器历史栈后退,不依赖 referrer,但无法跨域。 | | `location.replace()` | 替换当前页(不产生历史记录),但需手动指定 URL。 | | `location.href = ...` | 依赖 `document.referrer` 实现动态跳转,可跨域但存在兼容性问题[^4][^5]。 | --- ### 总结 - **核心作用**:模拟浏览器“返回”行为,跳转至来源页。 - **适用场景**:返回按钮、表单提交后跳转、防盗链。 - **必做检查**: 1. 验证 `document.referrer` 非空。 2. 处理参数拼接(`?` 与 `&`)。 3. 针对 IE 使用 `<a>` 标签兼容方案[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值