【问题标题】:Check if JavaScript dialog box is open in a PDF检查 JavaScript 对话框是否在 PDF 中打开
【发布时间】:2018-11-05 18:26:08
【问题描述】:

我正在尝试制作一对在打开 PDF 时显示的对话框;一个对话框将显示 PDF 是否在支持 Adob​​e Reader 级别的 JavaScript 功能的阅读器中打开,另一个将显示前一个对话框是否未显示(即,如果 PDF 在几乎不支持 JavaScript 的阅读器中打开,则表示第一个对话框无法显示)。

我现在遇到的问题是试图显示第二个对话框。我尝试使用 try-catch,但我假设它不起作用,因为第一个对话框实际上并没有显示...或其他什么。

如果由于缺乏支持而没有显示第一个对话框,我将如何显示第二个对话框?

这是我当前的代码(在页面属性中写为“页面打开”操作):

try {
     var d = dialog();

     d.execDialog();
} catch (e) {
     app.alert("ERROR: Incompatible reader; please install Adobe Reader to open this file.");
}

function dialog()
{
     var dialogDescriptor =
    {
        // Dialog description goes here
    };

     var dialogObject =
    {
        execDialog: function() { return app.execDialog(dialogDescriptor); },
    };

 return dialogObject;

}

我之所以使用 app.execDialog 是因为第一个对话框中会有超链接。

另外,我对使用 JavaScript 和处理 PDF 完全陌生,所以如果这是一个愚蠢的问题,我深表歉意。

【问题讨论】:

  • 如果您尝试同时显示两个对话框,Acrobat 和 Reader 会经常崩溃。您应该首先确定两个对话框中的哪一个适合显示,然后再显示那个。
  • 不过,我并不想同时显示两个对话框。如果另一个由于缺乏 javascript 支持而无法显示,我正在尝试显示;即,如果 execDialog 函数由于缺少功能而失败,例如在 Foxit 等非 adobe 阅读器中,我希望出现 app.alert 框。
  • 对不起 - 我误解了。请看我的回答。

标签: javascript pdf dialog acrobat adobe-reader


【解决方案1】:

您可以通过测试 app.execDialog 是否为函数来检查 PDF 查看器是否支持 Dialog 对象。像这样的...

if (typeof app.execDialog === "function") {
    // Can show Acrobat dialogs    
}
else {
    // Can't show Acrobat Dialogs
}  

这种代码适用于任何函数或对象方法。

【讨论】:

  • 嗯,我试过在代码中使用它,但它似乎不起作用。我尝试反转它(即 if typeof !== "function"),非 adobe 阅读器似乎像 adobe 一样使用 else 代码,因此非 adobe 阅读器似乎仍然将 execDialog 识别为函数。跨度>
  • 有趣。我刚刚尝试了 Foxit 的代码,并且桌面版本确实声称支持 execDialog ......它确实......这完全是错误的。如果您需要验证您是否在 Adob​​e 查看器中,而不仅仅是确定是否支持 execDialog,请枚举插件 (app.plugins) 并检查其中是否有任何以“ADBE”开头 - 我发现该方法是最可靠。
猜你喜欢
  • 2019-02-14
  • 2017-04-10
  • 1970-01-01
  • 2014-11-26
  • 2019-09-02
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2020-10-12
相关资源
最近更新 更多