我正在开发一个手机间隙应用程序,我们最近添加了对Windows 8.1平台的支持。应用程序使用Cordova FileSystem API下载/创建保存到设备的文件。
我已使用类似
的网址成功将文件保存到设备 ms-appdata:///local/file.png
我已经检查了我的电脑,该文件可以在应用程序根文件夹下的LocalState文件夹中查看。但是,当我尝试使用inAppBrowser打开此文件时,没有任何反应;没有报告任何错误消息,并且没有任何inAppBrowser默认事件触发。
function empty() { alert('here'); } //never fires
var absoluteUrl = "ms-appdata:///local/file.png";
cordova.InAppBrowser.open(absoluteURL, "_blank", "location=no", { loadstart: empty, loadstop: empty, loaderror: empty });
我已通过在网址
上调用以下内置javascript来验证网址是否有效Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
debugger; //the file object contains the correct path to the file; C:\...etc.
});
另外,添加url作为img标记的src可以正常工作。
我还尝试使用addEventListener(“loadstart”)等连接inAppBrowser处理程序,但它们都没有触发。但是,当我尝试打开“http://www.google.com”时,事件会触发,并且屏幕上会弹出inAppBrowser。
在检查dom后,我可以看到已经添加了inAppBrowser元素,但它似乎没有设置源属性
<div class="inAppBrowserWrap">
<x-ms-webview style="border-width: 0px; width: 100%; height: 100%;"></x-ms-webview>
</div>
我已经查看了其他问题,例如this one,但无济于事。我已经验证了
a)已安装InAppBrowser
b)deviceReady已解雇
我也尝试将目标更改为“_self”(同一问题)和“_system”(弹出窗口说你需要一个新的应用来打开msappdata://类型的文件)而且我的想法已经用完了。有没有人遇到过类似的问题?
答案 0 :(得分:3)
我有类似的问题。我的cordova应用程序下载文件,然后使用本机浏览器打开(以便正确处理图像,PDF文件等)。
最后,我不得不修改InAppBrowserProxy.js
类(Windows平台的InAppBrowser插件的一部分)。
这是打开文件的代码(纯JavaScript):
// This value comes from somewhere, I write it here as an example
var path = 'ms-appdata:///local//myfile.jpg';
// Open file in InAppBrowser
window.open(path, '_system', 'location=no');
然后,我更新了InAppBrowserProxy.js文件(在platforms\windows\www\plugins\cordova-plugin-inappbrowser\src\windows
下)。我替换了这段代码:
if (target === "_system") {
url = new Windows.Foundation.Uri(strUrl);
Windows.System.Launcher.launchUriAsync(url);
}
由此:
if (target === "_system") {
if (strUrl.indexOf('ms-appdata:///local//') == 0) {
var fileName = decodeURI(strUrl.substr(String(strUrl).lastIndexOf("/") + 1));
var localFolder = Windows.Storage.ApplicationData.current.localFolder;
localFolder.getFileAsync(fileName).then(function (file) {
Windows.System.Launcher.launchFileAsync(file);
}, function (error) {
console.log("Error getting file '" + fileName + "': " + error);
});
} else {
url = new Windows.Foundation.Uri(strUrl);
Windows.System.Launcher.launchUriAsync(url);
}
}
这是一个非常特别的黑客,但它为我做了诀窍,它可以改进,扩展,甚至标准化。
无论如何,可能还有其他方法可以达到这个目的,只是这对我有用......
答案 1 :(得分:1)
经过更多搜索后,似乎x-ms-webview(PhoneGap for Windows使用的底层组件)仅支持加载HTML内容。 Web视图控件上的此Microsoft blog post表明
UnviewableContentIdentified - 在用户导航到时触发 网页以外的内容。 WebView控件只能使用 显示HTML内容。它不支持独立显示 图像,下载文件,查看Office文档等。此事件 被激活,以便应用程序可以决定如何处理这种情况。
此article建议查看Windows.Data.Pdf命名空间,以便为阅读PDF提供应用内支持。