【问题标题】:Catching Click event of hyperlink on PDF in IFrame在 IFrame 中捕获 PDF 上超链接的单击事件
【发布时间】:2010-06-24 08:06:37
【问题描述】:

通过将 iframe 的 src 设置为 pdf 文档的路径,我将 pdf 加载到网页上的 iframe 中。这适用于查看 pdf 文件。

问题是某些 pdf 文件中包含指向外部网站的超链接,当点击这些链接时,会将外部网站加载到我的 iframe 中。

所以我的问题是:是否可以捕获 pdf 的超链接点击事件,以便我可以将请求重定向到新页面?

提前感谢您的宝贵建议。

【问题讨论】:

  • 已经23小时了,我问了这个问题...有没有人知道解决方案..或者给个建议.. :(

标签: .net pdf iframe


【解决方案1】:

一个想法:与其将src设置为直接指向PDF文件,不如将其设置为指向将加载pdf的页面;例如http://example.com/getPdf.aspx?file=SOME_URI

getPdf.aspx 页面可以包含检测页面何时将要导航然后执行某些操作的代码。我建议它调用应该首先关闭 iframe 并导航到 PDF 的父页面。

类似于以下内容:

//In getPdf.aspx

function Navigate()
{
    var parentWindow = this.parentNode.parentNode //this.parentNode.parentNode is the window hosting the iframe;
    var parentWindow.CloseMe(this.parentNode, PDF_URI);   //this.parent is the Iframe    

}


window.onunload = Navigate;

//In main page

function CloseIt(window_to_close, pdf)
{
    window_to_close.close();
    window.navigate(pdf); // or window.location = pdf;

}

我没有对此进行测试,但非常类似的东西可能会起作用。您可能会收到一条消息警告该脚本正在尝试关闭页面或其他内容。

【讨论】:

    【解决方案2】:

    由于“PDF”对象不是 HTML 或 DOM 的一部分,它不能被 JavaScript 监听器监听。据我所知,Adobe 没有为我们提供任何方法来收听 PDF 对象中的“点击超链接”。似乎没有直接或简单的方法来完成您的请求。

    但我有两个建议给你:

    1. 编写您自己的阅读器。例如,您可以在服务器端读取 PDF 页面并以您可以控制的方式将页面呈现给客户端(很像亚马逊图书预览)

    2. 如果您可以要求您的网站用户安装浏览器插件,我认为可以对 PDF 对象进行更多控制。

    【讨论】:

      【解决方案3】:

      也许可以捕捉到用户使用window.unload 导航离开的事件。

      window.onunload = function() {
          /* Do something */
          return false;
      }
      

      但是,我无法保证 onunload 中所有浏览器支持的操作范围。

      要考虑的其他事情是尝试为在新窗口中打开的 URL 设置默认 target(覆盖您希望正常运行的链接)。但是,我不确定您是否可以在父文档中为 iFrame 设置此行为。

      【讨论】:

      • 很遗憾无法取消 onunload。
      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 2018-10-13
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多