在 jQuery 个移动项目中下载文件

Download file in jQuery mobile project

刚开始自学 javascript 和 jQuery 移动设备以创建跨平台应用程序。我希望能够在我的应用程序中单击 links 从与文件的本地(phone)版本同步(覆盖)的文档中下载 PDF 文件。

this 开始,我发现我应该使用 data-ajax="false",所以这是我的第一次尝试:

<a href="http://blablabla/download/pdf" data-ajax="false">Download</a>

不幸的是,当我在构建并将其传输到我的 phone 后单击 link 时没有任何反应。它在网络浏览器中运行良好,但在 Phonegap 应用程序中运行良好。任何想法可能是错的?我怎样才能以更好的方式做到这一点,以准确实现我打算让它做的事情?如果文件已经下载,我希望 link 改为说 "Open",并且 link 指向文件的本地版本。

Android 的浏览器中没有本机 PDF 查看器,因此它真的不知道如何处理该 PDF link,这意味着您需要下载它你自己。一种解决方案是使用 Cordova 的文件和文件传输插件。这是一个从头开始的完整工作示例,它下载了我存放在服务器上的 PDF,并允许用户在 reader 应用程序中打开它,您可以按如下方式对其进行测试。在保存源代码的目录中打开命令提示符,然后:

  1. 创建一个 Cordova 项目并进入项目目录。在命令提示符下,键入:

    cordova create hello com.example.hello HelloWorld

    cd hello

  2. 在项目目录内的www目录中,将www/index.html文件的全部内容替换为:

<!DOCTYPE html>
<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <script src="cordova.js"></script>
        
        <a href="#" onclick="downloadPdf();">Download PDF</a>
        
        <script>
            document.addEventListener("deviceready", onDeviceReady, false);
            function onDeviceReady() {
                alert("Got deviceready");
            }
        
            function downloadPdf() {
                var fileTransfer = new FileTransfer();
                var inputUri = encodeURI("http://nextwavesoftware.com/downloads/helloworld.pdf");
                var outputPath = cordova.file.externalDataDirectory + "helloworld.pdf";
                // var outputPath = "/storage/emulated/0/Download/helloworld.pdf";
                alert("Starting download to " + outputPath);
                fileTransfer.download(
                      inputUri,
                      outputPath,
                    function (entry) {
                        alert("Download complete: " + entry.fullPath + ", URL=" + entry.toURL());
                        cordova.plugins.fileOpener2.open(
                            entry.toURL(), // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
                            'application/pdf',
                            {
                                error: function (e) {
                                    alert('fileOpener2 error status: ' + e.status + ' - Error message: ' + e.message);
                                },
                                success: function () {
                                    alert('fileOpener2 file opened successfully');
                                }
                            }
                        );
                    },
                    function (error) {
                        alert("download error: source=" + error.source + ", target=" + error.target + ", error code=" + error.code);
                    });
            }
        </script>
    </body>
</html>

  1. 在项目目录中,在命令提示符下,键入 cordova plugin add org.apache.cordova.file-transfer 添加文件传输插件。

  2. 在项目目录中,在命令提示符下,键入 cordova plugin add org.apache.cordova.file 添加文件插件。

  3. 在项目目录中,在命令提示符下,键入 cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2 添加 File Opener 插件。

  4. 在项目目录中,在命令提示符处键入 cordova run android 以构建应用程序并将其部署到模拟器或您的设备。

  5. 在模拟器或设备上,等到看到 Got deviceready 警报并关闭它;插件现在可以使用了。

  6. 在模拟器或设备上,单击 Download PDF 按钮。

您应该会看到一个 "Download complete" 对话框。关闭对话框,您应该会收到另一个询问 select 用于打开 PDF 文件的应用程序。