我意识到这个问题现在已经很老了,所以不幸的是你可能已经继续前进了,但是对于那些将来会发现这个问题的人。我试图做类似的事情。ASP 站点有指向带有 PDF 报告的文件夹的链接。ASHX 处理程序运行以确保授权,然后它传输适当的 pdf,使用window.open(...)
. 作为参考,这些是我正在测试的浏览器:
- 铬 V60.0.3112.113
- 火狐V55.0.3
- 边缘 V40.15063.0.0
- IE11
使用任何类似的东西:
var newWin = window.open("PrivateFileHandler.ashx?VariablesForTheHandler");
// add a load listener to the window so that the title gets changed on the page load
newWin.addEventListener("load", function() {
newWin.document.title = "NewTitle";
});
不工作。我从这里的 SO 答案中提取了这个想法。
一旦我意识到<head>
甚至没有添加一个<title>
,我就尝试了这个:
newWin.addEventListener("load", function() {
newWin.document.getElementsByTagName('html')[0]
.appendChild(newWin.document.createElement('head'))
.appendChild(newWin.document.createElement('title'))
.appendChild(newWin.document.createTextNode('NewTitle'));
});
这是我从另一个关于 SO的答案中得出的。<title>
以这种方式添加时,Chrome 会忽略该字段中的“NewTitle” 。虽然当我使用 Developer F12 工具手动更改它时,选项卡的标题发生了变化。我无法让它自动工作。Firefox 和 Edge 覆盖了整个<head>
. 到那时我什至没有在 IE11 中尝试过。我所有的新标签仍然有“PrivateFileHandler.ashx ...”
在上面两个链接的问题/答案中,我的 JS 代码示例有一些排列。IE。使用newWin.onload = function(){ ... };
而不是addEventListener( ... )
函数。有一个 JQuery 选项可以添加<head>
,以及另一个利用该setTimeout(...)
功能的解决方案。随意参考这些链接和答案来尝试这些解决方案。但是,鉴于我的测试,这些选项不会对我产生影响。
我最初的目标(如上面的@J-man)是将正在传输的 pdf 文件的名称放入选项卡标题中。我的解决方案实际上并没有涉及对我的 javascript 的任何更改。为此,我删除了报告文件夹中的网络配置:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="/" />
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>
这最初关闭了我的文件夹,以便只有 PrivateFileHandler(而不是 IIS)可以传输 PDF。然后按照这个 MSDN 指南,我将我的应用程序配置为通过我的 PrivateFileHandler 发送报告/xxx.pdf 的所有请求。
<handlers>
<add name="PrivateFileHandler" verb="*"
path="Reports/*.pdf"
type="PrivateFileHandler"
resourceType="File" />
</handlers>
我在集成模式下运行 IIS 7.0。那里有关于在 IIS 6.0 和经典模式下的 IIS 7.0 中执行相同操作的说明。我的 PrivateFileHandler 需要进行一些调整来处理这种请求,但是当它交付 PDF 内容时,浏览器选项卡标题就是 PDF 的名称。
旁注 - 如果您想在新选项卡/窗口中打开文件,请务必将此标题包含在您的Response
:
context.Response.AddHeader("content-disposition", "inline; filename=\"" + FileName + "\"")