私は既存のWebアプリケーション(HTML5、JS、CSSなど)をWindows UWPアプリケーションに変換しました。オフラインで実行できるように、Windowsストアからサーフェスハブに転送します。 PDF表示以外はすべて正常に動作しています。新しいウィンドウでPDFを開くと、Edgeベースのブラウザウィンドウがクラッシュするだけです。 IFRAMEを開いてPDFJSを読み込むと、それもクラッシュします。私が本当にやってみたいのは、PDFをオペレーティングシステムに渡して、ユーザーがインストールしたPDFビューアで見ることができるようにすることです。UWP(Universal Windows Platform)WebアプリケーションからPDFを起動する方法
私はいくつかのWindows固有のJavascript APIが有望であると思っていますが、動作させることができません。例:ファイル生成
Windows.System.Launcher.launchUriAsync(
new Windows.Foundation.Uri(
"file:///"+
Windows.ApplicationModel.Package.current.installedLocation.path
.replace(/\//g,"/")+"/app/"+url)).then(function(success) {
if (!success) {
:私はエッジにコピーすることができます// URLを、それはPDFを示したので、私は、URLのものが正しいと知っています。しかし、アプリケーションでは何もしません。
https:// URLをそのlaunchUriAsync関数に渡すと、それが機能します。だから関数はfile:// URLが好きではないようです。
また、私はこれを試してみました:
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(url).then(
function(file) { Windows.System.Launcher.launchFileAsync(file) })
のいずれかに動作しなかったこと。再度、エラーはありません。それはただ何もしなかった。
私が試すことができる他のアイデアはありますか?
- アップデート -
回答を参照してください。ここで私が使用し終わったコードです。 (すべての私のファイルは、「アプリ」と呼ばれるサブフォルダにあることに注意してください):
if (location.href.match(/^ms-appx:/)) {
url = url.replace(/\?.+/, "");
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(("app/" + url).replace(/\//g,"\\")).then(
function (file) {
var fn = performance.now()+url.replace(/^.+\./, ".");
file.copyAsync(Windows.Storage.ApplicationData.current.temporaryFolder,
fn).then(
function (file2) {
Windows.System.Launcher.launchFileAsync(file2)
})
});
return;
}
はあなたが\に/を有効にする必要がありますか、ファイルを見つけることができませんが判明します。 copyAsyncは上書きを拒否しているので、私は常に新しいファイル名を使用するためにperformance.nowを使用します。 (私のアプリケーションでは、とにかくPDFのソースファイル名が自動生成されます)。ファイル名を保持したい場合は、それがすでに存在するかどうかをチェックするコードを追加する必要があります。
このコメントは、C#サンプルが「インストールフォルダから直接ファイルを起動できないので、最初に一時フォルダにコピーしてください」と伝えています。私はjavascriptのWebアプリケーションでそのコピーを行う方法を把握できるかどうかを確認します。 –
正解、インストール先からコピーする必要があります。そのためにStorageFile.CopyAsyncを使用できます。私はその詳細をキャプチャするために私の答えを編集します。 –
私は最後に使用したコードを表示するために質問を更新します。 –