从Apache Cordova中的本地XML文件加载XmlDocument / Document对象

时间:2017-05-22 04:40:26

标签: javascript android cordova typescript winjs

我目前正在将一个WinJS JavaScript / Typescript Windows 10 Universal应用程序移植到Apache Cordova。在Windows 10 WinJS应用程序中,通过以下方式加载本地XML文件效果非常好:

private loadXmlAsync(version: Version): WinJS.Promise<Windows.Data.Xml.Dom.XmlDocument> {
      return new WinJS.Promise((complete, error, progress) => {
          Utility.getVerifiedUriAsync(version.fileName).then((uri) => { 
              Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then((file) => {
                  Windows.Data.Xml.Dom.XmlDocument.loadFromFileAsync(file).then((doc) => {
                      complete(doc);
                  });
              });
          });
      });
  }

在加载本地XML文件时提供Windows.Data.Xml.Dom.XmlDocument对象。
现在将此功能移植到Apache Cordova,我已经使以下解决方案工作:

function loadXmlAsync(fileName: string): WinJS.Promise<Document> {
    return new WinJS.Promise((complete, error, progress) => {
        getVerifiedUriAsync(fileName).done((uri) => {
            (window as any).resolveLocalFileSystemURL(uri,
                (f: FileEntry) => {
                    f.file((file) => {
                        var reader = new FileReader();
                        reader.onloadend = (evt) => {
                            var parsedXml = new DOMParser().parseFromString((evt.target as any).result, "text/xml");
                            complete(parsedXml);
                        }
                        reader.onerror = (evt) => {
                            error(evt.target);
                        }
                        reader.readAsBinaryString(file);
                    });
                },
                (e) => {
                    error(e);
                }
            );
        });
    });
}

然而,这个解决方案非常慢,特别是与几乎即时的WinJS / Windows 10应用程序的解决方案相比。 时间的流失发生在极慢reader.readAsBinaryString(file)的呼叫中。 (DOMParser().parseFromString()运行良好且速度相对较快)(我也试过reader.readAsText(file),速度也很慢)
因此,是否有一种正确的方法在Apache Cordova中以与Windows 10 / WinJS实现类似的方式加载本地XML文件?

谢谢!

0 个答案:

没有答案