我正在构建一个ASP.NET站点,它的一个功能是,当单击一个链接时,它会打开一个新选项卡。该链接称为ASHX Http Handler,它在幕后进行一些处理。我想要的是能够获取链接的文本(例如,如果一个人点击了说文件100.txt的链接)并将其显示在新打开的ASHX Http Handler的窗口标题中。
我目前正在使用:
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", "<script>window.open('Handler.ashx?fileName=" + fileName + "');</script>", false);
这将完美地打开处理程序,只有我无法获得新标签显示的标题。这将是有益的,因为用户可以一次打开任意数量的链接,并且他或她应该能够根据窗口标题区分哪个选项卡。
我尝试过类似的东西
var w = window.open(...); w.document.title=fileName
和
var w = window.open(...); w.document.write('<title>' + fileName + '</title>');
并且这些都没有正常工作(因为我写入处理程序中的上下文对象,所以写入它也很难添加标题)。
如果有人有一些想法或建议,我们将不胜感激。 感谢
答案 0 :(得分:0)
我意识到这个问题现在已经很老了,所以不幸的是你可能会继续前进,但是那些将来会发现这个问题的人。我试图做类似的事情。 ASP站点具有指向包含PDF报告的文件夹的链接。 ASHX处理程序运行以确保授权,然后它传输适当的pdf,使用window.open(...)
在新的选项卡/窗口中打开它。作为参考,这些是我正在测试的浏览器:
使用类似的东西:
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 answer here中提取了这个想法。
一旦我意识到没有<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上从another answer派生的。 Chrome忽略了“新标题”&#39;在<title>
字段中以这种方式添加时。虽然当我使用Developer F12工具手动更改它时,标签的标题发生了变化。我无法让它自动运行。 Firefox和Edge覆盖了整个<head>
。到那时我甚至都没在IE11中尝试过。我的所有新标签仍然包含&#34; PrivateFileHandler.ashx ...&#34;
我的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。然后在this MSDN guide之后,我将我的应用程序配置为通过我的PrivateFileHandler发送所有report / 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的名称。
SIDENOTE - 如果您想要在新标签/窗口中打开文件,请务必在Response
中添加此标题:
context.Response.AddHeader("content-disposition", "inline; filename=\"" + FileName + "\"")