ASHX Handler的窗口标题

时间:2013-10-01 20:57:31

标签: c# javascript asp.net httphandler window.open

我正在构建一个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=fileNamevar w = window.open(...); w.document.write('<title>' + fileName + '</title>');

并且这些都没有正常工作(因为我写入处理程序中的上下文对象,所以写入它也很难添加标题)。

如果有人有一些想法或建议,我们将不胜感激。 感谢

1 个答案:

答案 0 :(得分:0)

我意识到这个问题现在已经很老了,所以不幸的是你可能会继续前进,但是那些将来会发现这个问题的人。我试图做类似的事情。 ASP站点具有指向包含PDF报告的文件夹的链接。 ASHX处理程序运行以确保授权,然后它传输适当的pdf,使用window.open(...)在新的选项卡/窗口中打开它。作为参考,这些是我正在测试的浏览器:

  • Chrome V60.0.3112.113
  • Firefox V55.0.3
  • Edge 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 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 + "\"")