0

DevExpressPhoneGapで開発されたハイブリッド アプリがあります。

経由でローカルの jpeg 画像を開こうとしています

window.open('file:///var/mobile/Containers/Data/.../image.jpg', '_system');

しかし、iPhone および iPad (最新の iOS 9 バージョン) では (もう) 動作せず、エラーで失敗しますerror: "This app is not allowed to query for scheme file"

(アプリは事前に Phonegap メソッドFileTransfer.downloadで取得したフォルダに画像をダウンロードしていますwindow.requestFileSystem(LocalFileSystem.PERSISTENT, 0, ...)。)

Android でも問題なく動作し、数週間前には iPhone でも問題なく動作しました。DevExtremeのアップデートによるPhoneGapのアップデートが関係しているのではないかと思います。

以前はPhoneGap 3.7.0 を使用していましたが、現在はcli-5.2.0を使用しています。

私はすでにこの質問 ( https://www.devexpress.com/Support/Center/Question/Details/Q486439 ) を見つけましたが、これは似ていますが、すでに 2 年前のものであり、私の質問を解決していないようです。

GapDebug を使用すると、ログに次のように表示されます。

<Warning>: THREAD WARNING: ['InAppBrowser'] took '38.211914' ms. Plugin should use a background thread.
<Warning>: THREAD WARNING: ['File'] took '26.509033' ms. Plugin should use a background thread.
<Warning>: -canOpenURL: failed for URL: "file:///var/mobile/Containers/Data/Application/9425CCB6-77F7-4337-B37C-7DB577C2F6B4/Documents/myDocuments/a96e7238-a502-49e6-bcd3-186937afc3cb/camera_1458208164206.jpg" - error: "This app is not allowed to query for scheme file"

これはある種のパーミッションの問題ですが、config.xml に何を追加すればよいでしょうか?

これは私の config.xml です:

<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" id="com.devexpress.apptemplate" version="1.0" versionCode="1">
  <name>ApplicationTemplate</name>
  <preference name="phonegap-version" value="cli-5.2.0" />
  <preference name="permissions" value="none" />
  <preference name="prerendered-icon" value="true" />
  <preference name="android-windowSoftInputMode" value="adjustResize" />
  <preference name="SplashScreen" value="splash" />
  <preference name="SplashScreenDelay" value="60000" />
  <preference name="AutoHideSplashScreen" value="false" />
  <preference name="DisallowOverscroll" value="true" />
  <preference name="StatusBarOverlaysWebView" value="false" />
  <preference name="StatusBarBackgroundColor" value="#000000" />
  <preference name="KeyboardDisplayRequiresUserAction" value="false" />
  <feature name="http://api.phonegap.com/1.0/network" />
  <gap:plugin name="com.devexpress.plugins.devextremeaddon" version="1.0.1" />
  <gap:plugin name="cordova-plugin-ios-longpress-fix" version="1.1.0" source="npm" />
  <gap:plugin name="org.apache.cordova.camera" version="0.3.6" />
  <gap:plugin name="org.apache.cordova.file" version="1.3.3" />
  <gap:plugin name="org.apache.cordova.file-transfer" version="0.5.0" />
  <gap:plugin name="org.apache.cordova.inappbrowser" version="0.6.0" />
  <gap:plugin name="org.apache.cordova.media-capture" version="0.3.6" />
  <gap:plugin name="org.apache.cordova.media" version="0.2.16" />
  <gap:plugin name="org.apache.cordova.network-information" version="0.2.15" />
  <gap:plugin name="cordova-plugin-statusbar" version="2.1.0" source="npm" onload="true" />
  <gap:plugin name="org.apache.cordova.splashscreen" version="1.0.0" onload="true" />
  <access origin="*" subdomains="true"/>
  <gap:plugin name="cordova-plugin-whitelist" source="npm"/>
  <allow-navigation href="*" />
  <allow-intent href="*" />
</widget>

2行も追加しました

  <allow-navigation href="*" />
  <allow-intent href="*" />

https://github.com/apache/cordova-plugin-whitelistによると、役に立ちません。

別のハイブリッド フレームワークである Ionic も、ドキュメントhttp://docs.ionic.io/docs/cordova-whitelistで、CLI バージョンなどの新しい Phonegap バージョンにアクセス許可の問題がある可能性があること、および上記のことが言及されていることを確認しました。<allow-navigation href="*" />を使用する必要がありますが、私の場合は役に立たないようです。

===更新===

Phonegap と Cordova の github で 2 つのチケットを作成しました。

===アップデート2 ===

以下に示すように、代わりにhttps://github.com/pwlin/cordova-plugin-file-opener2を使用していますが、これは正常に動作します。

4

2 に答える 2

2

iOS 9 では、照会する URL を構成する必要があります (それらを開くことができるかどうかを確認してください)。

これを行うには、info.plist を編集し、LSApplicationQueriesSchemesキーと、クエリするスキームを含む文字列の配列を追加する必要があります。

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>file</string>
 <string>whatsapp</string>
 <string>...</string>
</array> 

コルドバを使用しているため、いくつかの異なる方法でそれを行うことができます。

platform/ios 内で Xcode プロジェクトを開いて info.plist ファイルを編集できますが、場合によっては Xcode プロジェクトが削除されて再作成され、変更が失われます。

もう 1 つのオプションは、info.plist に書き込むだけの単純な cordova プラグインを作成することです。これを行うには、plugin.xml で config-file タグを使用する必要があります。

<config-file target="*-Info.plist" parent="LSApplicationQueriesSchemes">
    <array>
        <string>file</string> 
    </array>
</config-file>

http://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#platform

3 番目のオプションはフックを使用することです。フックは実行されるスクリプト ファイル (ノード、bash) であり、それを使用して info.plist http://cordova.apache.org/docs/en/latestに書き込むことができます。 /guide/appdev/hooks/index.html

于 2016-04-08T08:53:40.607 に答える
1

私は同じ問題に直面していました... 問題を回避するために、cordova-plugin-file-opener2 (github.com/pwlin/cordova-plugin-file-opener2) の使用を開始しました。

空白の問題を解決するために、targetPath から空白を削除しました。

targetPath = targetPath.replace(/ /g,'')

したがって、私のダウンロード/オープンコードは次のようになります。

$cordovaFileTransfer.download(url, targetPath, options, trustHosts)
  .then(function(result) {
    $cordovaFileOpener2.open(targetPath, mimeType)
  })
于 2016-04-08T14:29:37.753 に答える