cha*_*svt 11 cordova inappbrowser
使用Cordova/PhoneGap 3.3.0,我使用FileTransfer插件下载文件,然后尝试使用InAppBrowser插件打开它.  我可以成功下载文件,并将其放在临时目录中.由于File插件现在使用URL模式,我无法弄清楚如何将正确的url/path传递给window.openInAppBrowser插件的方法.我也找不到任何相关文件.我能找到的所有"下载和打开"文档都是过时的和pre-URL-schema.
相关链接:
我发现过时的例子:
entry.fullPath,现已弃用,toURL()这是我的代码:
var uri = encodeURI("http://some.url/file.pdf");
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0,
    function (fileSystem) {
        var fileTransfer = new FileTransfer();
        var filename = fileSystem.root.toURL() + uri.substr(uri.lastIndexOf("/") + 1);
        fileTransfer.download(uri, filename,
            function(entry) { // download success
                var path = entry.toURL(); //**THIS IS WHAT I NEED**
                window.open(path, "_system");
            },
            function(error) {} // irrelevant download error
        );
    },
    function(error) {} // irrelevant request fileSystem error
);
我目前正在使用Nexus 7和Nexus 5在Android上进行测试.InAppBrowser正确打开默认的pdf启动器(在我的情况下是Adobe Reader),但后来我得到了"文档路径无效"错误.
[更新:显示返回值]
我已经为文件路径尝试了以下所有组合:
var path = entry.toURL(); // "cdvfile://localhost/temporary/file.pdf"
var path = entry.fullPath; // "file.pdf"
var path = fileSystem.root.toURL() + filename; // "cdvfile://localhost/temporary/file.pdf"
var path = fileSystem.root.fullPath + filename; // "/file.pdf"
由于Cordova 3.4文件协议已经改变,而不是使用fullPath,它们现在提供了返回cdvfile://path/to/your/file.ext路径的toURL().
因此,当您使用filesystem对象的回调(使用entry参数)下载文件时,只需调用entry.toURL()并使用以下语句打开它以打开它 - 假设您安装了InApBrowser并且_blank将打开InAppBrowser的窗口:
window.open(entry.toURL(), '_blank', 'location=no,closebuttoncaption=Close,enableViewportScale=yes');  
我在我的博客上写了这篇文章(如果你想要所有的参考和背景信息).
我认为我对此有一个解决方案,但这有点讨厌。
我翻遍了科尔多瓦JAVA,寻找它构造了文件入口JSON对象的地方。特别是通过查找将其添加fullPath到对象中的位置。
我为“ fullAbsolutePath”添加了一个附加条目,其值为[file].getAbsolutePath(),其中[file]java.io.file实例在附近。我在所有可以发现的地方都这样做,只是为了安全起见,因为它似乎并没有伤害到任何东西。
然后,我在plugins \ file文件夹中修改了FileEntry.js和File.js,以将该值也填充到文件输入对象中。
仍在尝试解决问题,但我相信我的方向正确……
我认为更好的解决方案是修改inAppBrowser插件以识别和解析cordovaFile://协议,并确保它们故意遮盖了绝对文件系统路径-但这可能超出我的范围。
编辑-是的!这可行!现在,我可以获取一个文件条目,调用file方法,然后从fileObject中读取fullSystemPath。值就像我的Android上的“ / storage / emulated / 0 / whatever /”一样。只需添加“ file://”,window.open就会接受它。
| 归档时间: | 
 | 
| 查看次数: | 27541 次 | 
| 最近记录: |