js打开新窗口时隐藏掉地址栏的解决方案

本文介绍了一种在使用window.open时隐藏URL参数的方法,通过创建空白页并利用iframe的srcdoc属性来展示内容,以此来解决因URL参数可见带来的安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天在项目中发现一个前端的js问题,使用window.open打开新的窗口时浏览地址,但是传了一些关键的主键参数不能隐藏,因此引出了一系列的安全问题。

一、问题?

用户在使用的过程中不小心改变了地址栏的主键ID却带出其他用户的信息

二、解决思路

由于项目安全等级不是非常的高,所以这里主要描述简单的处理方式

1.修改window.open参数

 window.open(url,'location=no','',false);

location=yes|no|1|0 是否显示地址字段.默认值是yes
经测试crome浏览器支持不显示地址栏。只是地址栏的变为不可修改(百度其他浏览器也不显示,有时间可以测试一下)

当然window.open还有很多其他属性: window.open详细参数.

2.跳转空白页,由空白页初始化时使用ajax跳转页面

url为空白页地址
window.open(url,'location=no','',false);

这里发现了另外一个问题就是ajax调用接口时返回的是完整的Html界面。发现没有办法在当前空白页渲染。
尝试过直接将返回的结果写入到body中去,但是界面无法解析。
后来尝试使用内联框架 ifram 标签。直接将结果写入到ifram标签中去依旧无法解析,google了一下ifram的属性设置,找到 srcdoc属性(规定在 iframe 中显示的页面的 HTML 内容。)直接将返回的完整的html赋值给scrdoc属性可以解析HTML

内联标签ifram详细属性: iframe内联框架详细参数.

完整的空白界面如下。因为没有使用了具体的参数传值所以在每次跳转空白界面时将选中的值隐藏在父窗口。然后再使用window.opener方法获取到父窗口当前选中的ID然后保存到当前窗口,刷新时在当前窗口获取ID 。避免刷新当前窗口之前打开其他的窗口导致父窗口的隐藏ID被修改导致数据错乱,

<html>
<head>
    <script type="text/javascript">
        var loadingShow = true;
    </script>
</head>
<body style="overflow: hidden;">
<input hidden id="id" value="">
<iframe style="width: 100%;height: 100vh" srcdoc="" id="iframe">

</iframe>

<script>
     $(function () {
     	 // 当前界面没有值时才去父窗口获取ID 否则刷新当前ID(避免当前窗口未关闭 再打开新窗口返回刷新当前窗口获取到其他ID)
     	 var id =  $("#id").val();
     	 if(typeof (id ) == "undefined" || id == null || id === "" || id == 'null'){
     	 	// 从父窗口中获取选中ID
         	id =  window.opener.document.getElementById("tbPatientId").value;
         	// 将选中的父窗口的ID值保存在当前窗口
         	$("#id").val(id);
     	 }
         // 实际跳转的html界面的url
         var url = "~~~~?id="+id;
         openUrl('id','',url,'');
     })

    /**
     * 打开页面
     */
    function openUrl(id, name, url, refresh) {
        $.ajax({
            url: url,
            method: "GET",
            success : function(data) { // ajax返回的数据
                $("#iframe").attr("srcdoc",data);
            }
        });
    }
</script>
</body>
</html>
第二种思路就是曲线救国,不能直接过去就拐个弯过去。

总结

这里虽然解决了地址栏的问题,但不是很好的解决方案。如果对参数进行加密的话,就不用担心关键信息泄露这种问题了。现在比较多的通用的做法就是对属性名和属性值都进行加盐加密。
### 关于火狐浏览器搜索打开新窗口的原因分析 当用户报告 Firefox 浏览器在执行搜索操作未按预期打开新窗口的情况,可能涉及多个因素。以下是可能导致此行为的一些原因及其解决方案: #### 1. 默认搜索引擎设置更改 Mozilla 和 Google 的合作关系已经结束[^1],这可能会导致默认搜索引擎发生变化。如果用户的配置文件中设置了新的默认搜索引擎(例如 Yahoo 或其他),而该引擎的行为不同于之前的 Google 搜索,则可能出现不一致的表现。 - **解决方法**: 用户可以手动调整默认搜索引擎。 ```javascript // 打开地址栏并输入 about:preferences#search // 在“搜索”部分下选择所需的默认搜索引擎 ``` #### 2. 插件或扩展冲突 某些第三方插件或扩展程序可能干扰了 Firefox 的正常搜索功能。这些扩展可能修改了浏览器的核心行为,从而阻止新窗口的开启。 - **解决方法**: 尝试禁用所有扩展,并逐步重新启用以定位具体问题所在。 ```javascript // 输入 about:addons 到地址栏进入扩展管理页面 // 点击右上角菜单按钮 -> 右键单击每个已安装的扩展 -> 勾选/取消勾选状态 ``` #### 3. 安全证书错误影响用户体验 尽管安全证书错误通常不会直接影响搜索功能,但如果存在广泛的 SSL/TLS 验证失败情况 (如引用中的描述)[^2],则整个浏览体验会受到负面影响,甚至间接引起异常表现。 - **解决方法**: 更新 CA 根证书存储库或者清除缓存数据来修复潜在的安全警告。 ```bash certutil -d sql:$HOME/.pki/nssdb -L # 查看当前信任列表 certutil -A ... # 添加缺失的信任链节点(需管理员权限) ``` #### 4. 单文档多视图显示机制的影响 由于 FireFox 实现了一种称为“multi-view display”的技术[^3],即同一个网页实例可以在不同界面中呈现出来,因此有看似没有新开窗口实际上只是切换到了已有标签页而已。 - **解决方法**: 调整偏好选项使得每次点击链接都强制创建独立标签页而非复用现有资源。 ```javascript browser.link.open_newwindow=3; // 设置为总是新建tab而不是覆盖原位置加载内容 ``` 综上所述,通过上述几种途径应该能够有效应对大部分关于 firefox search not opening new window 的场景需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值