在href中使用window.open()的方法

本文介绍了一种解决在打开新窗口链接后,父页面出现仅显示[object]内容的问题的方法。通过在链接中加入特定的JavaScript代码,可以有效避免父页面的意外刷新。

贴上代码:

<a href=\"javascript: window.open('"+strFrmUrl+"','_blank','toolbar=no,scrollbar=no,top=200,left=200,width=400,height=500')\">

若是跳转以后,父页面刷新了,页面值只出现了[object]的内容,则可以使用下面的方法将问题搞定:

<a href=\"javascript: window.open('"+strFrmUrl+"','_blank','toolbar=no,scrollbar=no,top=200,left=200,width=400,height=500');void(0)\">

<think> 我们参考多个引用,总结在Vue2中使用window.open()并携带参数的几种方法: 1. 使用`this.$router.resolve()`生成完整URL(引用[2][5]) 优点:直接使用Vue Router管理路由,避免404问题(引用[2]) 示例: ```javascript methods: { openNewWindow(row) { // 使用resolve解析路由,生成包含base的完整路径 const { href } = this.$router.resolve({ path: '/target', // 目标路径 query: { // 携带参数 id: row.id, name: row.name } }); window.open(href, '_blank'); } } ``` 2. 直接拼接URL(引用[3][4]) 适用于不需要Vue Router管理,或者请求后端接口的情况(如下载文件) 示例: ```javascript window.open(`http://example.com/api?param1=${value1}&param2=${value2}`) ``` 3. 通过a标签绑定事件并传递参数(引用[1]) 在模板中使用a标签,将参数绑定到元素属性上,然后通过事件处理函数获取属性值 示例: ```vue <template> <a href="javascript:void(0)" :data-row="JSON.stringify(row)" @click="goPay">支付</a> </template> <script> export default { methods: { goPay(event) { // 从事件目标获取绑定的属性 const rowData = event.currentTarget.getAttribute('data-row'); const row = JSON.parse(rowData); // 然后可以使用第一种或第二种方式打开窗口 const { href } = this.$router.resolve({ path: '/pay', query: row }); window.open(href, '_blank'); } } } </script> ``` 注意事项: - 如果使用路由跳转,确保路由配置正确,避免404(引用[2]) - `window.open`必须在同步代码中执行(引用[1]) - 参数较长时,注意URL长度限制,可使用POST方式或存储到sessionStorage(不在引用中,但常见) 根据上述方法,推荐使用第一种,因为它能很好地与Vue Router集成,避免路径错误。 相关问题: 1. 如何避免使用`window.open`被浏览器拦截? 2. 除了`window.open`,Vue中还有哪些页面跳转方式? 3. 如何通过`window.open`传递大量参数? </think> 在 Vue2 中使用 `window.open()` 方法并携带参数,主要有以下几种实现方式,根据引用内容综合整理: ### 方法1:使用 Vue Router 解析路由(推荐) ```javascript methods: { openNewPage(row) { // 解析目标路由(携带参数) const { href } = this.$router.resolve({ path: '/target-page', // 目标页面路由 query: { // 传递参数 id: row.id, data: JSON.stringify(row) // 复杂对象需序列化 } }); window.open(href, '_blank'); // 新窗口打开 } } ``` **优点**: - 自动处理 base 路径,避免部署后 404 错误[^2] - 参数通过 URL query 传递,刷新页面不丢失数据 - 符合 Vue 路由规范 ### 方法2:直接拼接 URL 参数 ```javascript window.open( `/target-page?projectId=${this.projectId}&startTime=${this.startTime}`, '_blank' ); ``` **适用场景**: - 简易参数传递 - 后端接口调用(如文件下载)[^3][^4] ### 方法3:通过 DOM 属性传递参数(特殊场景) ```vue <template> <a href="javascript:void(0)" :data-row="JSON.stringify(row)" @click="handleOpen"> 打开 </a> </template> <script> export default { methods: { handleOpen(event) { const rowData = event.currentTarget.dataset.row; const row = JSON.parse(rowData); // 再使用方法1或方法2打开 } } } </script> ``` **适用场景**: - 需要绕过 Vue 事件限制的动态参数[^1] --- ### 注意事项 1. **同步执行**:`window.open()` 必须在同步代码中调用,异步操作会导致拦截[^1] 2. **参数长度**:URL 有长度限制,超大参数建议用 `sessionStorage` 临时存储 ```javascript // 存储参数 sessionStorage.setItem('tempData', JSON.stringify(data)); // 新页面读取 mounted() { const data = JSON.parse(sessionStorage.getItem('tempData')); } ``` 3. **路由配置**:确保目标路由已在 `router.js` 中注册 4. **安全提示**:敏感参数需加密处理,避免 URL 暴露敏感信息 > 示例:文件下载场景直接拼接参数[^3][^4] > ```javascript > window.open(`/api/download?mid=${mid}&filename=${filename}`); > ``` --- ### 相关问题 1. 如何解决 `window.open()` 被浏览器拦截的问题? 2. Vue 中如何通过 `window.open()` 下载文件并传递认证信息? 3. 除了 `window.open()`,Vue 还有哪些跨页面通信方式? 4. 如何在新窗口中获取 Vuex 的状态数据? [^1]: 引用[1]: 解决vue项目里window.open浏览器跳转拦截问题+需要动态传递参数 [^2]: 引用[2]: 解决VUE项目window.open()方法打包部署上线报错404 [^3]: 引用[3]: Vue项目中使用window.open()实现文件的下载 [^4]: 引用[4]: 前端window.open实现导出携带参数 [^5]: 引用[5]: vue使用window.open()跳转页面
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

堂前燕Tornado

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值