【问题标题】:Not able to launch a pdf file in inappbrowser in android无法在 android 的 inappbrowser 中启动 pdf 文件
【发布时间】:2014-12-05 22:28:46
【问题描述】:

当用户单击链接时,我需要在 inappbrowser 中显示 pdf。它在 ios 上运行良好,但在 android 上运行不正常。我正在为我的项目使用 IBM Worklight。以下是我使用的代码:

window.open("pdfURL","_blank","location=yes");

在 ios 中,inappbrowser 启动并显示 pdf,但在 android 中,inappbrowser 已启动但不显示任何内容

【问题讨论】:

  • 你能分享日志/错误吗?
  • 我没有收到任何错误。 inappbrowser 正在启动 url,但不知何故,它无法从该链接显示/下载 pdf。

标签: javascript jquery cordova ibm-mobilefirst phonegap-plugins


【解决方案1】:

与内置 PDF 查看器的 iOS 不同,Android 的 webview 没有内置 PDF 查看器。
这就是它在 Android 中失败的原因。

您在 Android 中有 2 个选择:

  1. 使用 Google Docs 查看文件通过将文件存储在远程服务器上并像这样重定向用户:window.open(encodeURI('https://docs.google.com/gview?embedded=true&url=http://www.your-server.com/files/your_file.pdf'), '_blank', 'location=yes,EnableViewPortScale=yes');

  2. 或者使用 Cordova 插件。例如this one(您可以在 Google 中搜索更多信息)。为此,您需要了解how to create Cordova plug-ins in Worklight

您可以在此处阅读更多选项:Phonegap InAppBrowser display pdf 2.7.0

【讨论】:

  • 感谢您的回答。我尝试了第一个选项,但是当我使用此代码时,我在 inappbrowser 中看到 html 内容/代码,而不是 pdf 文件。让我知道我是否必须对第一个选项进行任何其他代码更改才能工作。谢谢。
  • 我自己尝试过使用它进行测试:window.open(encodeURI('https://docs.google.com/gview?embedded=true&url=http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf'), '_blank', 'location=yes,EnableViewPortScale=yes');,它运行良好。确保将 PDF 存储在公共文件服务器中(而不是 Worklight 服务器中)。
  • 当我通过替换我的 pdf url 执行此操作时,会话 cookie 会丢失,因此它正在显示会话超时页面 jsp 代码 src。为了解决问题,我想像在 android 浏览器中一样下载 pdf。当我在 android 浏览器中运行我的应用程序并单击 pdf 链接时,它会打开新选项卡并下载 pdf。是否可以使用 phonegap/worklight 从 android web 视图执行相同的操作。谢谢。
  • Google 文档查看器无法在 android 中打开链接
  • 'https://docs.google.com/gview?embedded=true&url=http://www.your-server.com/files/your_file.pdf 如果我们不需要标头,如果我们有标头将其附加到我保存到 pdf usind 文件传输插件的 url 中,这将起作用,然后将路径附加到 url 路径但是无法找到错误是否有任何其他方法可以在 inappbrowser @IdanAdar 中显示本地 pdf 文件
【解决方案2】:

尝试使用

window.open('pdfURL',"_system","location=yes,enableViewportScale=yes,hidden=no");

在哪里使用_system 将下载文件并在系统的应用程序(如 Chrome 或其他 PDF 查看器)中打开它。

【讨论】:

  • 您是否在 Android 上尝试过带有 PDF 的“_system”解决方案来验证它是否有效?
  • 这为我解决了这个问题。虽然我认为它可能会滥用此设置,但它似乎对我有用(在开发/调试应用程序中)并且在部署签名的 APK 时会报告任何不同的情况。
【解决方案3】:

使用 uriEncodeComponent(link) 和 https://docs.google.com/viewer?url= 链接

Doc、Excel、Powerpoint 和 pdf 都支持。

在应用浏览器中使用cordova。

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    window.open = cordova.InAppBrowser.open;
        }

            $("body").on("click",function(e){
           var clicked = $(e.target);
         if(clicked.is('a, a *'))
       {
             clicked = clicked.closest("a");
             var link = clicked.attr("href");
            if(link.indexOf("https://") !== -1)
           {
               if(true) //use to be able to determine browser from app
                 {
                    link = "http://docs.google.com/viewer?url=" +  encodeURIComponent(link) + "&embedded=true";
             }

                 window.open(link, "_blank", "location=no,toolbar=no,hardwareback=yes");
                return false;
            }
    }
    });

【讨论】:

  • 请注意,如果打算从设备的存储中打开 PDF,此解决方案将不起作用 - 这将导致空白屏幕且没有控制台错误。使用设备的浏览器可能会按预期工作。
  • 我不相信你会使用 inappbrowser 来显示设备上已经存在的 pdf?我认为这没有多大意义
  • 这不是通常的方法,是的,但我目前正在从事的项目正在这样做以克服某些 pdf 库(如 ng2-pdf-viewer)可以实现的缩放和纵横比限制随身携带。在 iOS 上运行良好,但在 Android 上不行。
【解决方案4】:

使用 google drive viewer 似乎是一个不错的快速选择。

但今后他们可能会更改或贬低他们的 API,您必须找到一种新的方式来支持这一点。 此外,安全性是另一个考虑因素,因为您的文件是公开可用且可下载的。

我在最近的一个项目中遇到了类似的情况,我们通过使用以下方式解决了它:pdf.js

这是一个基于 JS 的 PDF 解析器,具有一组良好的阅读器功能。它不像原生解析器那么流畅,但为我们完成了这项工作。 它的主要优点是我们可以控制代码并能够从设备文件系统打开文件。

如果您想采用更原生的应用内路线,那么正如@Idan Adar 提到的那样,原生库+cordova 插件是您的最佳选择。

【讨论】:

    【解决方案5】:

    试试这个代码,它对我来说很好。

    var inAppBrowserRef;
    var target = "_system";
    var options = "location=yes,hidden=no,enableViewportScale=yes,toolbar=no,hardwareback=yes";
    inAppBrowserRef = cordova.InAppBrowser.open(url, target, options); 
    

    【讨论】:

    • 这对我来说是InAppBrowser: Error loading url file:///android_asset/www/assets/pdf/my.pdf:android.os.FileUriExposedException: file:///android_asset/www/assets/pdf/my.pdf exposed beyond app through Intent.getData(),主要是因为 API 级别 24+ 中增强的安全措施(请参阅stackoverflow.com/a/38858040/1902598
    • InAppBrowser:加载 url 时出错:这是您要打开的 pdf url 使用下面的更新代码:code var url ="www.abc.com/abc/xyz.pdf"; var inAppBrowserRef; var target = "_system"; var options = "location=yes,hidden=no,enableViewportScale=yes,toolbar=no,hardwareback=yes"; inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
    • 感谢您的更新,但我们的 PDF 与应用程序捆绑在一起,没有我们可以链接到的外部网站。通过以下解决方法修复了该问题:github.com/pwlin/cordova-plugin-file-opener2/issues/…
    【解决方案6】:

    它对我有用

    window.open(link, "_blank","location=yes");
    

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多