js 文件预览 在窗口设置“自定义名称”

文章讲述了如何在点击表格列标题时预览文件,通过window.open实现打开文件,但遇到浏览器窗口标题无法自定义的问题。作者发现可以通过设置新窗口的title属性来改变标题,或者使用iframe嵌入文件并隐藏边框达到目的。最后提供了Vue封装的方法以便于调用。

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

1. 最近需要做一个点击表格某一列的标题,预览当前文件的一个小功能。本身功能很简单,点击该标题,预览文件,那么拿到他对应的文件地址,在浏览器打开就行了。

2. 事实如此,使用window.open(url, '_blank');就行,只要你地址正确,那么在浏览器的窗口就打开了一个新的文件,(注意这里打开的是pdf格式,其它格式的需要对应的方法),然而问题来了,文件是正常打开了,但是浏览器窗口的标题确不是我想要的,为此设置了半天,还是不行。

3.找了半天原因,原来是 浏览器 “新窗口的名字是由浏览器根据url 定义的,本身无法设置”,但是现在有这个需求,尝试了很多方法都不行,后来发现了window.open 本身有许多内置属性,例如:

width:窗口的宽度;

height:窗口的高度;

top:窗口距离屏幕顶部的距离,默认0;

left:窗口距离屏幕左侧的距离,默认0;

menubar:是否显示菜单栏,yes\no;

toolbar:是否显示工具栏,yes\no;

location:是否显示地址栏,yes\no;

status:是否显示状态栏,yes\no;

resizable:是否允许用户调整窗口大小,yes\no;

scrollbars:是否显示滚动条,yes\no。

打开一个新窗口本质是打开一个页面,那么肯定有 body,document 这些元素,那么我们直接设置他的title不就行了,事实还真可以。

let pages= window.open(encodeURI(basePreviewUrl + ret.body.viewPath), '_blank');
 // 强行设置标题     新窗口的名字是由浏览器定义的 本身无法设置
 setTimeout(function(){
        pages.document.title = fileName 
 },3000);

//fileName  是名称  open 里面是地址 换成你们自己的

注意这里的定时器:如果你要加载的文件时间很长的话,不加定时器标题会被浏览器生成的标题覆盖了,后面的时间看你们实际需要多长时间。

4. 既然这样可以加上的话,那很简单了,我们直接往里面扔个iframe进去不就行了,把它的宽、高、边框设置为空不就行了,具体代码如下:

 // 强行设置标题  方法
                 openUrl(url, title) { 
                    //console.log('url',url,title)
                      // 检查是否已经存在相同URL的窗口,不要重复打开
                        if (vue.flagYu === url) {
                            return; 
                        }
                      const newWindow= window.open('about:blank', title);
                      newWindow.document.title = title;
                      let iframe = document.createElement('iframe');
                      iframe.src = url;
                      iframe.style.width = '100%';
                      iframe.style.height = '100vh';
                      iframe.style.margin = '0';
                      iframe.style.padding = '0';
                      iframe.style.overflow = 'hidden';
                      iframe.style.border = 'none';
                      newWindow.document.body.style.margin = '0';
                      newWindow.document.body.appendChild(iframe);
                      window.newWindow = newWindow;
                      vue.flagYu = url;
  },

这里是用vue 封装了一个方法,需要的话直接传参数就行了,传url,和要显示的标题就行。

this.openUrl('','标题')。

结束。。

如果对您有用,请点个赞哦(ღ( ´・ᴗ・` )比心)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值