可以通过以下代码实现
<html><head>
<script language="JavaScript" src="jquery-1.11.3.min.js" type="text/javascript"></script>
<script language="JavaScript" type="text/JavaScript">
/**
弹出iframe页面(iframe后面会添加灰色蒙版)
**/
function showIframe(url){
//添加背景遮罩
$("<div id='YuFrameMobilePreviewBg' style='cursor:pointerwidth:100%height:100%background-color: Graydisplay:blockz-index:9998position:absoluteleft:0pxtop:0pxfilter:Alpha(Opacity=30)/* IE */-moz-opacity:0.4/* Moz + FF */opacity: 0.4 '/>").prependTo('body')
$("<div id='showMobilePreview'>" +
"<div class='mobile_preview_header'><i class='mobile_preview_header_icon'></i></div>" +
"<div class='mobile_preview_frame'><iframe id='YuFrameMobilePreview' name='YuFrameMobilePreview' ></iframe></div>" +
"<div class='mobile_preview_footer'><i class='mobile_preview_footer_icon'></i></div>" +
"</div>").prependTo('body')
$("#YuFrameMobilePreview").attr("src", url)
//点击背景遮罩移除iframe和背景
$("#YuFrameMobilePreviewBg").click(function() {
$("#showMobilePreview").remove()
$("#YuFrameMobilePreviewBg").remove()
})
}
</script>
<style type="text/css">
#showMobilePreview {
z-index: 9999
width: 387px
height: 768px
min-height: 396px
max-height: calc(100vh - 64px)
position: absolute
left: 50%
top: 50%
transform: translate(-50%, -50%)
opacity: 1
text-align: center
border-radius: 50px
box-shadow:-10px 10px 30px #333333
}
.mobile_preview_header {
display: block
position: absolute
top: 0
left: 0
height: 40px
width: 387px
background: #eeeff2
text-align: center
line-height: 40px
border-top-right-radius: 50px
border-top-left-radius: 50px
}
.mobile_preview_header_icon {
display: inline-block
width: 65px
height: 10px
background: #c8c9cc
border-radius: 9px
vertical-align: middle
margin-top: 18px
}
.mobile_preview_frame {
width: 375px
min-height: 294px
height: 667px
max-height: calc(100vh - 166px)
top: 40px
left: 0
border: 6px solid #eeeff2
position: relative
background-color: #fff
display: block
}
#YuFrameMobilePreview {
border: none
width: 375px
height: 100%
}
.mobile_preview_footer {
display: block
position: absolute
bottom: 0
left: 0
height: 52px
width: 387px
background: #eeeff2
text-align: center
line-height: 45px
border-bottom-right-radius: 50px
border-bottom-left-radius: 50px
}
.mobile_preview_footer_icon {
display: inline-block
width: 43px
height: 43px
background: #c8c9cc
border-radius: 50%
vertical-align: middle
}
#mobilePreview{
background: url("mobile-preview.png") no-repeat
padding-left: 20px
color: #bcbdc1
}
#mobilePreview:hover{
background: url("mobile-preview-hover.png") no-repeat
padding-left: 20px
color: #009ddc
}
</style>
</head>
<body>
<input type="button" style="content: "\F17c"" onClick="showIframe('https://m.baidu.com')" value="加载"/>
<hr/>
<div >
<span id="mobilePreview" onclick="showIframe('https://m.baidu.com')">手机预览</span>
</div>
</body>
<html>
最近修改公司vue项目中使用pdf.js来实现在线预览上传的各类文件.由于使用pdf.js在预览时是直接在标签内将src属性赋值为要请求的地址.这就导致一个问题,会直接请求服务器的文件路径地址,而这个服务器文件路径就会暴露出来。处于安全性考虑在预览请求时不再返回地址,改为通过调用普通接口,而是统一返回流(word,pdf)或者base64(jpg,png...)。.前端再进行解析并实现在线预览.
此时遇到第一个问题:
这个请求是在插件中进行的无法携带项目中封装的各类请求头信息(token..等)。 翻看pdf.js源码及网上总结.发现一个底层方法
该方法可传一个对象作为参数,对象内可以添加url(所请求的接口),headers(请求头信息)等.... . 有了这个方法就好处理了.
最后在将该方法当做变量赋值给pdf的src.大功告成.
最后再补充一些 : @loaded="docLoaded" @page-loaded ="pageLoaded" 这两个方法为加载预览文件时的loading事件,
最后引一波示例,
用这个方法:varWordApp=newActiveXObject("Word.Application")//注:IE的ActiveX安全性能放开才行WordApp.Application.visible=falsevarDoc=WordApp.documents.open(path)//对word的操作见office的MSDNWordApp.quit()